home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / time / tolleuhr / tolleuhr_asm / tolleuhr.s < prev    next >
Text File  |  1994-12-07  |  67KB  |  3,113 lines

  1. ***************************************************************************
  2.  
  3. ; inspired from 'TolleUhr' by Matthias Fleischer - translated to assembler
  4. ; (gcc is good - i am better !)
  5.  
  6. ; uhr v0.1 - 24/02/94 by Gunther Nikl - project started
  7. ; uhr v1.2 - 07/03/94 by Gunther Nikl - newlookmenus, localized, bugfixed
  8. ;            24/08/94 by Gunther Nikl - several minor improvements
  9.  
  10. ***************************************************************************
  11.  
  12. ; include stuff
  13.  
  14.         include    lvo30/dos_lib.i
  15.         include    lvo30/exec_lib.i
  16.         include    lvo30/icon_lib.i
  17.         include    lvo30/locale_lib.i
  18.         include    lvo30/gadtools_lib.i
  19.         include    lvo30/graphics_lib.i
  20.         include    lvo30/intuition_lib.i
  21.         include    support/defs.i
  22.  
  23. ; specific define(s)
  24.  
  25. _LVOBeginIO    equ    -30            ; for audio
  26. _LVOGetSysTime    equ    -66            ; for timer
  27.  
  28. ; macro stuff
  29.  
  30. MITEM        macro
  31.         IFEQ    NARG-5
  32. ItemCount    set    \5
  33.         ENDC
  34.         dc.b    \1,\2,\3,\4
  35. ItemCount    set    ItemCount+1
  36.         endm
  37.  
  38. WINIT        macro                ; idcmp,wintitle,gadgetanz
  39.         dc.w    \1
  40.         dc.b    \2,\3
  41.         endm
  42.  
  43. GITEM        macro                ; left,top,width,height,gtext,kind
  44.         dc.b    \1,\2,\3,\4,\5,\6
  45.         endm
  46.  
  47. ADDCMD        macro                ; Table,Function,[Number]
  48.         IFEQ    NARG-3
  49. \1Num        set    \3
  50.         ENDC
  51.         dc.w    \1\2-\1Tab
  52. \1Num        set    \1Num+1
  53.         endm
  54.  
  55. ADDLOC        macro
  56.         IFEQ    NARG-2
  57. LocCount    set    \2
  58.         ENDC
  59.         dc.w    m_\1-LocaleTab
  60. \1        equ    LocCount
  61. LocCount    set    \1+1
  62.         endm
  63.  
  64. ; global stuff
  65.  
  66.     STRUCT Globals
  67.       ULONG    SysBase,0
  68.       ULONG    WbMsg
  69.       ULONG    DosBase
  70.       ULONG    IconBase
  71.       ULONG    IntBase
  72.       ULONG    GfxBase
  73.       ULONG    GadsBase
  74.       ULONG    LocBase
  75.       ULONG    Catalog
  76.       ULONG    OurTask
  77.  
  78.       ULONG    TimerPort
  79.       ULONG    TimerIO
  80.       ULONG    AudioPort
  81.       ULONG    AudioIO,2
  82.       ULONG    WaveForm
  83.  
  84.       ULONG    VisualInfo
  85.       ULONG    Menus
  86.       ULONG    WinPtr
  87.       ULONG    RPort1
  88.  
  89.       ULONG    ColWin,2
  90.       ULONG    AlmWin,2
  91.       ULONG    AboutReq
  92.  
  93.       ULONG    Links
  94.       ULONG    Oben
  95.       ULONG    Breite
  96.       ULONG    Hoehe
  97.       ULONG    BoLeft
  98.       ULONG    BoTop
  99.       ULONG    Breit2
  100.       ULONG    Hoehe2
  101.       ULONG    ReDrawx1
  102.       ULONG    ReDrawy1
  103.       ULONG    ReDrawx2
  104.       ULONG    ReDrawy2
  105.       ULONG    xMask
  106.       ULONG    yMask
  107.       ULONG    Buf
  108.       ULONG    imClass
  109.       ULONG    imCode
  110.       ULONG    PlayTune
  111.       ULONG    WbArg
  112.       ULONG    oldPri
  113.       ULONG    color
  114.  
  115.       UWORD    std
  116.       UWORD    min
  117.       UWORD    sec
  118.       UWORD    alstd
  119.       UWORD    almin
  120.       UWORD    st
  121.       UWORD    mi
  122.       UWORD    xOffset
  123.       UWORD    yOffset
  124.       UWORD    GadSize
  125.  
  126.       UBYTE    EndAll
  127.       UBYTE    Active
  128.       UBYTE    TimerOpen
  129.       UBYTE    TimerSent
  130.       UBYTE    AudioOpen
  131.       UBYTE    AudioSent,2
  132.       UBYTE    SoundOn
  133.       UBYTE    sekunden
  134.       UBYTE    oval
  135.       UBYTE    schatten
  136.       UBYTE    hires
  137.       UBYTE    interlace
  138.       UBYTE    smarthour
  139.       UBYTE    zeigen
  140.       UBYTE    zeigertyp
  141.       UBYTE    zeigerbreite
  142.       UBYTE    rahmenanz
  143.       UBYTE    chime
  144.       UBYTE    xDouble
  145.       UBYTE    yDouble
  146.       UBYTE    alarm
  147.       UBYTE    reqnr
  148.       UBYTE    filter
  149.       UBYTE    closegad
  150.  
  151.       UBYTE    pad,3
  152.  
  153.       UBYTE    TextAttr,8
  154.       UBYTE    Pens,16
  155.       UBYTE    Must,4
  156.       UBYTE    NewWinBuf,48
  157.       UBYTE    GadgetBuf,44*4
  158.       UBYTE    MenuBuf,63*20
  159.       UBYTE    RPort2,100
  160.       UBYTE    BitMap1,40
  161.       UBYTE    TempRas,8
  162.       UBYTE    AreaInf,24
  163.       UBYTE    Table,28
  164.       UBYTE    Muster,32
  165.       UBYTE    NewGad,32
  166.       UBYTE    EasyBuf,20
  167.       UBYTE    Ergebnis,20*4
  168.     LABEL gb_SIZEOF
  169.  
  170. PubScreen    equ    NewWinBuf+30
  171.  
  172. bp        equr    a4            ; the base register
  173.  
  174. ***************************************************************************
  175.  
  176.         SECTION start,CODE
  177.  
  178. start        link    bp,#gb_SIZEOF        ; make room on the stack
  179.         move.w    #(~gb_SIZEOF>>2),d1
  180.         move.l    bp,a1
  181. 1$        clr.l    -(a1)            ; clear local var area
  182.         dbra    d1,1$
  183.         move.l    4,a6
  184.         move.l    a6,SysBase(bp)        ; cache SysBase
  185.         suba.l    a1,a1
  186.         RECALL    FindTask        ; use system function ..
  187.         move.l    d0,a2
  188.         move.l    a2,OurTask(bp)        ; cache task ptr
  189.         tst.l    172(a2)
  190.         bne.s    fromCLI
  191. fromWB        lea    92(a2),a0        ; get wbmsg
  192.         RECALL    WaitPort
  193.         lea    92(a2),a0
  194.         RECALL    GetMsg
  195.         move.l    d0,WbMsg(bp)
  196. fromCLI        bsr    main            ; call main
  197.         move.l    WbMsg(bp),d2
  198.         beq.s    1$
  199.         RECALL    Forbid
  200.         move.l    d2,a1
  201.         RECALL    ReplyMsg        ; reply wbsmg
  202. 1$        moveq    #0,d0
  203.         unlk    bp
  204.         rts
  205.  
  206. ***************************************************************************
  207.  
  208. OpenMainWin    lea    NewWinBuf(bp),a0    ; init & open main window
  209.         move.w    Links+2(bp),d0
  210.         swap    d0
  211.         move.w    Oben+2(bp),d0
  212.         move.w    Breite+2(bp),d1
  213.         swap    d1
  214.         move.w    Hoehe+2(bp),d1
  215.         movem.l    d0/d1,0(a0)        ; size
  216.         move.b    #1,9(a0)
  217.         move.l    #$c0306,10(a0)        ; idcmp
  218.         move.l    #$200840,14(a0)        ; flags
  219.         lea    GadgetBuf(bp),a1
  220.         move.l    a1,18(a0)        ; gadgets
  221.         move.l    #10<<16+10,38(a0)
  222.         moveq    #-1,d0
  223.         move.l    d0,42(a0)
  224.         move.w    #15,46(a0)        ; type
  225.         lea    maintags(pc),a1
  226.         CALL    OpenWindowTagList,IntBase(bp)
  227.         move.l    d0,WinPtr(bp)
  228.         beq.s    1$            ; no window !
  229.         move.l    d0,a0
  230.         move.l    50(a0),RPort1(bp)
  231.         suba.l    a1,a1
  232.         lea    ProgName(pc),a2
  233.         RECALL    SetWindowTitles        ; set new screen title
  234.         move.l    WinPtr(bp),a0
  235.         move.l    Menus(bp),a1
  236.         RECALL    SetMenuStrip        ; attach menus
  237.         moveq    #0,d0
  238.         move.b    Pens+0(bp),d0
  239.         move.l    RPort1(bp),a1
  240.         CALL    SetAPen,GfxBase(bp)
  241.         bsr    NewSize2        ; update gfx stuff
  242.         beq.s    1$
  243.         bsr    NextTick
  244.         bsr    Rahmen
  245.         bsr    ZifferBlatt
  246.         bsr    Zeichnen
  247. 1$        rts
  248.  
  249. ***************************************************************************
  250.  
  251. InitClock    bsr    SetPattern        ; set new pattern
  252.         lea    TextAttr(bp),a0        ; init font struct
  253.         lea    TopazName(pc),a1
  254.         move.l    a1,(a0)+
  255.         move.l    #$80001,(a0)
  256.         lea    GadgetBuf(bp),a1    ; init gfx stuff
  257.         lea    GadgetList(pc),a0
  258.         moveq    #1,d0
  259.         moveq    #3,d1
  260. 5$        move.w    d0,8(a1)        ; width
  261.         move.w    d0,10(a1)        ; height
  262.         move.b    (a0)+,13(a1)        ; flags
  263.         move.b    d0,15(a1)        ; activation
  264.         move.b    (a0)+,17(a1)        ; type
  265.         lea    44(a1),a1
  266.         move.l    a1,-44(a1)
  267.         dbra    d1,5$
  268.         clr.l    -44(a1)            ; clear last ptr
  269.         lea    MenuList(pc),a2
  270.         lea    MenuBuf(bp),a3
  271.         moveq    #ItemCount-1,d2
  272. 4$        move.b    (a2)+,0(a3)        ; type
  273.         move.b    (a2)+,d0
  274.         ext.w    d0
  275.         ext.l    d0
  276.         bmi.s    3$
  277.         bsr    GetLocStr        ; get localized string
  278. 3$        move.l    d0,2(a3)
  279.         move.b    (a2)+,11(a3)        ; flags
  280.         moveq    #0,d0
  281.         move.b    (a2)+,d0        ; mutual exclude
  282.         bpl.s    2$
  283.         andi.w    #$7f,d0
  284.         lsl.w    #5,d0
  285. 2$        move.l    d0,12(a3)
  286.         lea    20(a3),a3        ; next menu
  287.         dbra    d2,4$
  288.         moveq    #AboutKey,d0        ; command keys for project menu
  289.         bsr    GetLocStr
  290.         move.l    d0,MenuBuf+1*20+6(bp)
  291.         moveq    #SaveKey,d0
  292.         bsr    GetLocStr
  293.         move.l    d0,MenuBuf+2*20+6(bp)
  294.         moveq    #QuitKey,d0
  295.         bsr    GetLocStr
  296.         move.l    d0,MenuBuf+3*20+6(bp)
  297.         move.l    PubScreen(bp),a0
  298.         suba.l    a1,a1
  299.         CALL    GetVisualInfoA,GadsBase(bp)
  300.         move.l    d0,VisualInfo(bp)
  301.         beq    1$
  302.         moveq    #20,d3            ; prepare menus
  303.         moveq    #$100>>8,d1
  304.         lea    MenuBuf(bp),a0
  305.         tst.b    sekunden(bp)
  306.         sne    d0
  307.         and.b    d1,d0
  308.         or.b    d0,5*20+10(a0)
  309.         tst.b    oval(bp)
  310.         sne    d0
  311.         and.b    d1,d0
  312.         or.b    d0,6*20+10(a0)
  313.         moveq    #8,d2
  314.         add.b    zeigen(bp),d2        ; what to show
  315.         mulu    d3,d2
  316.         or.b    d1,10(a0,d2.w)
  317.         moveq    #14,d2
  318.         add.b    zeigertyp(bp),d2    ; handtype
  319.         mulu    d3,d2
  320.         or.b    d1,10(a0,d2.w)
  321.         moveq    #19,d2
  322.         add.b    zeigerbreite(bp),d2    ; handwidth
  323.         mulu    d3,d2
  324.         or.b    d1,10(a0,d2.w)
  325.         tst.b    schatten(bp)
  326.         sne    d0
  327.         and.b    d1,d0
  328.         or.b    d0,24*20+10(a0)
  329.         moveq    #26,d2
  330.         add.b    rahmenanz(bp),d2    ; bordercnt
  331.         mulu    d3,d2
  332.         or.b    d1,10(a0,d2.w)
  333.         tst.b    hires(bp)
  334.         sne    d0
  335.         and.b    d1,d0
  336.         or.b    d0,30*20+10(a0)
  337.         tst.b    interlace(bp)
  338.         sne    d0
  339.         and.b    d1,d0
  340.         or.b    d0,31*20+10(a0)
  341.         moveq    #33,d2
  342.         add.b    chime(bp),d2
  343.         mulu    d3,d2
  344.         or.b    d1,10(a0,d2.w)
  345.         tst.b    smarthour(bp)
  346.         sne    d0
  347.         and.b    d1,d0
  348.         or.b    d0,37*20+10(a0)
  349.         tst.b    closegad(bp)
  350.         sne    d0
  351.         and.b    d1,d0
  352.         or.b    d0,41*20+10(a0)
  353.         suba.l    a1,a1
  354.         RECALL    CreateMenusA
  355.         move.l    d0,Menus(bp)
  356.         beq.s    1$            ; no menus !
  357.         move.l    d0,a0
  358.         move.l    VisualInfo(bp),a1
  359.         lea    MenuTag(pc),a2
  360.         RECALL    LayoutMenusA
  361.         tst.l    d0
  362.         beq.s    1$            ; error !
  363.         bsr    OpenMainWin
  364. 1$        rts
  365.  
  366. ***************************************************************************
  367.  
  368. OpenDevs    CALL    CreateMsgPort,SysBase(bp)    ; init device stuff
  369.         move.l    d0,TimerPort(bp)
  370.         beq.s    1$
  371.         move.l    d0,a0
  372.         moveq    #40,d0
  373.         RECALL    CreateIORequest
  374.         move.l    d0,TimerIO(bp)
  375.         beq.s    1$
  376.         move.l    d0,a1
  377.         lea    TimerName(pc),a0
  378.         moveq    #1,d0            ; UNIT_VBLANK
  379.         moveq    #0,d1
  380.         RECALL    OpenDevice
  381.         tst.l    d0
  382.         bne.s    2$            ; no timer.device !
  383.         st    TimerOpen(bp)
  384.         RECALL    CreateMsgPort
  385.         move.l    d0,AudioPort(bp)
  386.         beq.s    1$
  387.         move.l    d0,a0
  388.         moveq    #68,d0
  389.         RECALL    CreateIORequest
  390.         move.l    d0,AudioIO+4(bp)
  391.         beq.s    1$
  392.         moveq    #68,d0
  393.         move.l    AudioPort(bp),a0
  394.         RECALL    CreateIORequest
  395.         move.l    d0,AudioIO+0(bp)
  396.         beq.s    1$
  397.         move.l    d0,a1
  398.         lea    AudioName(pc),a0
  399.         moveq    #0,d0
  400.         moveq    #0,d1
  401.         RECALL    OpenDevice
  402.         tst.l    d0
  403.         bne.s    2$            ; no audio.device !
  404.         st    AudioOpen(bp)
  405.         moveq    #8,d0
  406.         move.l    #$10003,d1
  407.         RECALL    AllocVec
  408.         move.l    d0,WaveForm(bp)
  409.         beq.s    1$
  410.         move.l    d0,a0
  411.         move.l    #$7f807f80,0(a0)    ; rectangle
  412. 1$        rts
  413. 2$        moveq    #0,d0
  414.         bra.s    1$
  415.  
  416. ***************************************************************************
  417.  
  418. ParseArgs    move.l    WbMsg(bp),d0        ; check for cli or wb
  419.         suba.l    a0,a0
  420.         beq    ParseCLI
  421.  
  422. MergeToolTypes    movem.l    d2-d6/a2/a3,-(sp)
  423.         moveq    #0,d4
  424.         lea    linefeed(pc),a2        ; default string
  425.         moveq    #1,d2
  426.         move.l    d0,a3
  427.         move.l    28(a3),d3
  428.         move.l    36(a3),a3
  429.         subq.w    #1,d3
  430.         bcs    2$            ; what's this !?
  431.         beq.s    9$            ; sm_NumArgs == 1 !
  432.         addq.w    #8,a3
  433. 9$        move.l    a3,WbArg(bp)        ; store for later use
  434.         move.l    0(a3),d1
  435.         CALL    CurrentDir,DosBase(bp)
  436.         move.l    d0,d3            ; save old dir
  437.         move.l    4(a3),a0
  438.         CALL    GetDiskObject,IconBase(bp)
  439.         move.l    d0,d6
  440.         move.l    d3,d1            ; return to olddir
  441.         CALL    CurrentDir,DosBase(bp)
  442.         tst.l    d6
  443.         beq.s    2$            ; no icon ?!
  444.         move.l    d6,a0
  445.         move.l    54(a0),a0        ; calc needed buffer length
  446.         moveq    #0,d5
  447. 8$        move.l    (a0)+,d1
  448.         beq.s    6$            ; table end
  449.         move.l    d1,a1
  450. 7$        tst.b    (a1)+
  451.         bne.s    7$
  452.         sub.l    d1,a1
  453.         add.l    a1,d5
  454.         bra.s    8$
  455. 6$        move.l    d5,d0            ; adjust to multiple of eight
  456.         addq.l    #7,d0
  457.         andi.w    #-8,d0
  458.         moveq    #0,d1
  459.         CALL    AllocVec,SysBase(bp)
  460.         move.l    d0,d4
  461.         beq.s    2$            ; no buffer
  462.         move.l    d6,a2
  463.         move.l    54(a2),a2
  464.         move.l    d4,a1
  465. 5$        move.l    (a2)+,d0
  466.         beq.s    3$            ; table end
  467.         move.l    d0,a0
  468. 4$        move.b    (a0)+,(a1)+        ; build argument string
  469.         bne.s    4$
  470.         move.b    #' ',-1(a1)
  471.         bra.s    5$
  472. 3$        move.b    #10,-(a1)        ; terminate string
  473.         move.l    d6,a0
  474.         CALL    FreeDiskObject,IconBase(bp)
  475.         move.l    d4,a2
  476.         move.l    d5,d2
  477. 2$        move.l    d2,d0
  478.         move.l    a2,a0
  479.         bsr.s    ParseCLI        ; parse string
  480.         move.l    d0,d2
  481.         move.l    d4,d0
  482.         beq.s    1$            ; have we a vector ?
  483.         move.l    d0,a1
  484.         CALL    FreeVec,SysBase(bp)    ; free arg string
  485. 1$        move.l    d2,d0
  486.         movem.l    (sp)+,d2-d6/a2/a3
  487.         rts
  488.  
  489. ParseCLI    movem.l    d2-d4/a2/a3,-(sp)
  490.         move.l    a0,a2            ; save args
  491.         move.l    d0,a3
  492.         moveq    #5,d1
  493.         moveq    #0,d2
  494.         CALL    AllocDosObject,DosBase(bp)
  495.         move.l    d0,d3
  496.         beq.s    5$
  497.         move.l    d0,a0
  498.         movem.l    a2/a3,0(a0)        ; CS_Source,CS_Length
  499.         lea    template(pc),a1
  500.         move.l    a1,d1
  501.         lea    Ergebnis(bp),a1
  502.         move.l    a1,d2
  503.         tst.l    0(a0)
  504.         bne.s    6$            ; is WB
  505.         addq.l    #3,d1
  506.         addq.l    #4,d2
  507. 6$        RECALL    ReadArgs
  508. 5$        move.l    d0,d4
  509.         lea    Ergebnis+4(bp),a2
  510.         moveq    #50,d0            ; erg[0]
  511.         moveq    #0,d1
  512.         bsr    GetLong
  513.         move.l    d0,Oben(bp)
  514.         moveq    #50,d0            ; erg[1]
  515.         moveq    #0,d1
  516.         bsr    GetLong
  517.         move.l    d0,Links(bp)
  518.         moveq    #108,d0            ; erg[2]
  519.         moveq    #10,d1
  520.         bsr    GetLong
  521.         move.l    d0,Breite(bp)
  522.         moveq    #54,d0            ; erg[3]
  523.         moveq    #10,d1
  524.         bsr    GetLong
  525.         move.l    d0,Hoehe(bp)
  526.         move.l    (a2)+,d0        ; erg[4]
  527.         move.b    d0,sekunden(bp)
  528.         lea    Must(bp),a1        ; erg[5]
  529.         move.l    a1,a0
  530.         moveq    #4-1,d0
  531.         bsr    ReadStr
  532.         move.l    (a2)+,d0        ; erg[6]
  533.         move.b    d0,oval(bp)
  534.         move.l    (a2)+,d0        ; erg[7]
  535.         move.b    d0,schatten(bp)
  536.         moveq    #1,d0
  537.         moveq    #4,d1
  538.         bsr    GetByte            ; erg[8]
  539.         move.b    d0,zeigen(bp)
  540.         moveq    #2,d0
  541.         moveq    #3,d1
  542.         bsr    GetByte            ; erg[9]
  543.         move.b    d0,zeigertyp(bp)
  544.         moveq    #2,d0
  545.         moveq    #4,d1
  546.         bsr    GetByte            ; erg[10]
  547.         move.b    d0,zeigerbreite(bp)
  548.         lea    Pens(bp),a1
  549.         lea    pens(pc),a0
  550.         moveq    #14-1,d0
  551.         bsr    ReadStr            ; erg[11]
  552.         moveq    #6,d0
  553.         moveq    #2+4+8,d1
  554.         bsr    GetByte            ; erg[12]
  555.         moveq    #4,d1
  556.         and.b    d0,d1
  557.         sne    hires(bp)
  558.         sub.b    d1,d0
  559.         moveq    #8,d1
  560.         and.b    d0,d1
  561.         sne    interlace(bp)
  562.         sub.b    d1,d0
  563.         move.b    d0,rahmenanz(bp)
  564.         moveq    #0,d0
  565.         moveq    #2+4,d1
  566.         bsr    GetByte            ; erg[13]
  567.         moveq    #4,d1
  568.         and.b    d0,d1
  569.         sne    smarthour(bp)
  570.         sub.b    d1,d0
  571.         move.b    d0,chime(bp)
  572.         move.l    (a2)+,d0        ; erg[14]
  573.         move.b    d0,closegad(bp)
  574.         move.l    IntBase(bp),a6
  575.         move.l    (a2)+,d0        ; erg[15]
  576.         beq.s    4$
  577.         move.l    d0,a0
  578.         RECALL    LockPubScreen
  579.         tst.l    d0            ; ok ?
  580.         bne.s    3$
  581. 4$        move.l    d0,a0            ; lock default pub screen
  582.         RECALL    LockPubScreen
  583. 3$        move.l    d0,PubScreen(bp)
  584.         moveq    #5,d0
  585.         moveq    #20,d1
  586.         bsr    GetByte            ; erg[16]
  587.         move.l    OurTask(bp),a1
  588.         CALL    SetTaskPri,SysBase(bp)
  589.         move.l    d0,oldPri(bp)        ; save old pri
  590.         move.l    DosBase(bp),a6
  591.         move.l    d4,d1
  592.         beq.s    2$
  593.         RECALL    FreeArgs
  594. 2$        move.l    d3,d2
  595.         beq.s    1$
  596.         moveq    #5,d1
  597.         RECALL    FreeDosObject
  598. 1$        move.l    PubScreen(bp),d0    ; can we continue ?
  599.         movem.l    (sp)+,d2-d4/a2/a3
  600.         rts
  601.  
  602. GetLong        bsr.s    GetVal
  603.         beq.s    1$
  604.         cmp.l    d1,d2
  605.         bcs.s    1$
  606.         move.l    d2,d0
  607. 1$        rts
  608.  
  609. GetByte        bsr.s    GetVal
  610.         beq.s    1$
  611.         cmp.l    d2,d1
  612.         bcs.s    1$
  613.         move.l    d2,d0
  614. 1$        rts
  615.  
  616. GetVal        move.l    (a2)+,d2
  617.         beq.s    1$
  618.         move.l    d2,a0
  619.         move.l    0(a0),d2
  620.         cmp.l    a2,d2            ; for flags !
  621. 1$        rts
  622.  
  623. ReadStr        move.w    d0,d1
  624. 5$        move.b    0(a0,d0.w),0(a1,d0.w)    ; copy defaults
  625.         dbra    d0,5$
  626.         move.l    (a2)+,d0
  627.         beq.s    1$            ; no argument !
  628.         move.l    d0,a0
  629.         move.b    (a0)+,d0        ; if (*sorc='$'||toupper(*sorc)='X'||..)
  630.         cmpi.b    #'$',d0
  631.         beq.s    4$
  632.         andi.b    #$5f,d0
  633.         cmpi.b    #'X',d0
  634.         beq.s    4$
  635.         move.b    -1(a0),d0
  636.         lsl.w    #8,d0
  637.         move.b    (a0)+,d0
  638.         andi.w    #$ff5f,d0
  639.         cmpi.w    #'0X',d0
  640.         bne.s    3$
  641. 4$        move.b    (a0)+,d0        ; while (*sorc++ && *sorc++ && n--)
  642.         beq.s    1$
  643.         tst.b    (a0)
  644.         beq.s    1$
  645.         bsr.s    xtod
  646.         lsl.b    #4,d0
  647.         move.b    d0,(a1)
  648.         move.b    (a0)+,d0
  649.         bsr.s    xtod
  650.         or.b    d0,(a1)+        ; *dest++=xtod(sorc[-1])<<4+xtdo(*sorc);
  651.         dbra    d1,4$
  652.         bra.s    1$
  653. 3$        subq.w    #2,a0            ; else {
  654. 2$        move.b    (a0)+,d0        ;   while (*sorc++ && n--)
  655.         beq.s    1$
  656.         bsr.s    xtod
  657.         move.b    d0,(a1)+        ;     *dest++=xtod(*sorc);
  658.         dbra    d1,2$            ; }
  659. 1$        rts
  660.  
  661. xtod        addi.b    #-'0',d0        ; if (a >='0' && a<='9')
  662.         bcc.s    2$            ;   return (a-'0');
  663.         cmpi.b    #10,d0
  664.         bcs.s    1$
  665.         cmpi.b    #'a'-'0',d0        ; if (a >='a' && a<='f')
  666.         bcs.s    3$            ;   return (a-'a'+10);
  667.         addi.b    #-32,d0
  668. 3$        subq.b    #7,d0            ; if (a >='A' && a<='F');
  669.         cmpi.b    #10,d0            ;   return (a-'A'+10);
  670.         bcs.s    2$
  671.         cmpi.b    #16,d0
  672.         bcs.s    1$
  673. 2$        moveq    #0,d0            ; return(0);
  674. 1$        rts
  675.  
  676. ***************************************************************************
  677.  
  678. OpenLibs    move.l    SysBase(bp),a6        ; open all libs
  679.         lea    DosName(pc),a1
  680.         bsr.s    OpenLib
  681.         move.l    d0,DosBase(bp)
  682.         beq.s    1$            ; no dos v37+ !
  683.         lea    IconName(pc),a1
  684.         bsr.s    OpenLib
  685.         move.l    d0,IconBase(bp)
  686.         beq.s    1$            ; no icon v37+ !
  687.         lea    IntName(pc),a1
  688.         bsr.s    OpenLib
  689.         move.l    d0,IntBase(bp)
  690.         beq.s    1$            ; no intuition v37+ !
  691.         lea    GfxName(pc),a1
  692.         bsr.s    OpenLib
  693.         move.l    d0,GfxBase(bp)
  694.         beq.s    1$            ; no graphics v37+ !
  695.         lea    GadsName(pc),a1
  696.         bsr.s    OpenLib
  697.         move.l    d0,GadsBase(bp)
  698.         beq.s    1$            ; no gadtools v37+ !
  699.         lea    LocName(pc),a1
  700.         moveq    #38,d0
  701.         RECALL    OpenLibrary
  702.         move.l    d0,LocBase(bp)
  703.         beq.s    2$            ; no locale v38+ !
  704.         suba.l    a0,a0
  705.         lea    LocCat(pc),a1        ; our catalog 
  706.         suba.l    a2,a2
  707.         CALL    OpenCatalogA,d0
  708.         move.l    d0,Catalog(bp)
  709. 2$        moveq    #1,d0            ; all ok  
  710. 1$        rts
  711.  
  712. OpenLib        moveq    #37,d0            ; open lib v37+
  713.         jmp    _LVOOpenLibrary(a6)
  714.  
  715. ***************************************************************************
  716.  
  717. main        movem.l    d2-d7/a2-a6,-(sp)    ; main program
  718.         bsr    OpenLibs
  719.         beq    1$
  720.         bsr    OpenDevs
  721.         beq    1$
  722.         bsr    ParseArgs
  723.         beq    1$
  724.         bsr    InitClock
  725.         beq    1$
  726. 9$        moveq    #$40,d0            ; while (!CTRL_C && !EndAll) {
  727.         lsl.w    #6,d0
  728.         move.l    TimerPort(bp),a1
  729.         move.b    15(a1),d1
  730.         bset    d1,d0
  731.         move.l    AudioPort(bp),a1
  732.         move.b    15(a1),d1
  733.         bset    d1,d0
  734.         move.l    WinPtr(bp),a1
  735.         move.l    86(a1),a1
  736.         move.b    15(a1),d1
  737.         bset    d1,d0
  738.         move.l    AboutReq(bp),d1
  739.         beq.s    7$            ; no about requester
  740.         move.l    d1,a1
  741.         move.l    86(a1),a1
  742.         move.b    15(a1),d1
  743.         bset    d1,d0
  744. 7$        move.l    ColWin(bp),d1
  745.         beq.s    6$            ; no color window
  746.         move.l    d1,a1
  747.         move.l    86(a1),a1
  748.         move.b    15(a1),d1
  749.         bset    d1,d0
  750. 6$        move.l    AlmWin(bp),d1
  751.         beq.s    5$            ; no alarm window
  752.         move.l    d1,a1
  753.         move.l    86(a1),a1
  754.         move.b    15(a1),d1
  755.         bset    d1,d0
  756. 5$        CALL    Wait,SysBase(bp)
  757.         btst    #12,d0            ; CTRL_C ?
  758.         bne.s    1$
  759.         move.l    TimerPort(bp),a0    ; if (GetMsg(TimerPort))
  760.         RECALL    GetMsg
  761.         tst.l    d0
  762.         beq.s    3$
  763.         bsr    NextTick        ; if (NextTick())
  764.         beq.s    4$
  765.         bsr    ZifferBlatt
  766.         bsr    TestAlarm
  767. 4$        bsr    Zeichnen
  768. 3$        move.l    AudioPort(bp),a0    ; if (GetMsg(AudioPort))
  769.         RECALL    GetMsg
  770.         tst.l    d0
  771.         beq.s    2$
  772.         bsr    PlayNote
  773. 2$        bsr    CheckAboutReq
  774.         bsr    CheckAlmWin
  775.         bsr    CheckColWin
  776.         bsr    CheckMainWin
  777.         beq    9$            ; }
  778. 1$        bsr    CloseGfx
  779.         bsr    CloseDevs
  780.         bsr    CloseLibs
  781.         movem.l    (sp)+,d2-d7/a2-a6    ; exit main 
  782.         rts
  783.  
  784. ***************************************************************************
  785.  
  786. CloseLibs    move.l    Catalog(bp),d0        ; close catalog
  787.         beq.s    3$
  788.         move.l    d0,a0
  789.         CALL    CloseCatalog,LocBase(bp)
  790. 3$        move.l    SysBase(bp),a6        ; close all libs
  791.         move.l    LocBase(bp),a1
  792.         bsr.s    2$
  793.         move.l    GadsBase(bp),a1
  794.         bsr.s    2$
  795.         move.l    GfxBase(bp),a1
  796.         bsr.s    2$
  797.         move.l    IntBase(bp),a1
  798.         bsr.s    2$
  799.         move.l    IconBase(bp),a1
  800.         bsr.s    2$
  801.         move.l    DosBase(bp),a1
  802. 2$        move.l    a1,d0
  803.         beq.s    1$
  804.         RECALL    CloseLibrary
  805. 1$        rts
  806.  
  807. ***************************************************************************
  808.  
  809. CloseDevs    move.l    SysBase(bp),a6        ; free device stuff
  810.         move.l    OurTask(bp),a1
  811.         move.l    oldPri(bp),d0
  812.         RECALL    SetTaskPri        ; restore old pri
  813.         tst.b    AudioOpen(bp)        ; free audio stuff
  814.         beq.s    4$
  815.         move.l    AudioIO+4(bp),a2
  816.         tst.b    AudioSent+1(bp)
  817.         beq.s    7$            ; io not active
  818.         bsr.s    StopIO
  819. 7$        move.l    AudioIO+0(bp),a2
  820.         tst.b    AudioSent+0(bp)
  821.         beq.s    6$            ; io not active
  822.         bsr.s    StopIO
  823. 6$        tst.b    SoundOn(bp)
  824.         beq.s    5$            ; no channels allocated
  825.         bsr    EndTune
  826. 5$        bsr.s    CloseDev
  827. 4$        move.l    AudioIO+4(bp),a0    ; delete io's && port
  828.         bsr.s    DeleteIO
  829.         move.l    AudioIO+0(bp),a0
  830.         bsr.s    DeleteIO
  831.         move.l    AudioPort(bp),a0
  832.         bsr.s    DeletePort
  833.         move.l    WaveForm(bp),d0
  834.         beq.s    3$            ; no wave mem
  835.         move.l    d0,a1
  836.         RECALL    FreeVec
  837. 3$        tst.b    TimerOpen(bp)        ; free timer stuff
  838.         beq.s    1$
  839.         move.l    TimerIO(bp),a2
  840.         tst.b    TimerSent(bp)
  841.         beq.s    2$            ; io not active
  842.         bsr.s    StopIO
  843. 2$        bsr.s    CloseDev
  844. 1$        move.l    TimerIO(bp),a0        ; delete io && port
  845.         bsr.s    DeleteIO
  846.         move.l    TimerPort(bp),a0
  847.         bsr.s    DeletePort
  848.         rts
  849.  
  850. ;--------------------------------------------------------------------------
  851.  
  852. StopIO        move.l    a2,a1            ; end active io
  853.         RECALL    AbortIO
  854.         move.l    a2,a1
  855.         jmp    _LVOWaitIO(a6)
  856.  
  857. ;--------------------------------------------------------------------------
  858.  
  859. CloseDev    move.l    a2,a1            ; close device
  860.         jmp    _LVOCloseDevice(a6)
  861.  
  862. ;--------------------------------------------------------------------------
  863.  
  864. DeleteIO    move.l    a0,d0
  865.         beq.s    1$            ; no ioreq
  866.         RECALL    DeleteIORequest
  867. 1$        rts
  868.  
  869. ;--------------------------------------------------------------------------
  870.  
  871. DeletePort    move.l    a0,d0
  872.         beq.s    1$            ; no port
  873.         RECALL    DeleteMsgPort
  874. 1$        rts
  875.  
  876. ***************************************************************************
  877.  
  878. NewSize1    movem.l    d2/a2/a6,-(sp)        ; free gfx stuff 2
  879.         move.l    GfxBase(bp),a6
  880.         move.l    Buf(bp),d0
  881.         beq.s    4$
  882.         move.l    d0,a0
  883.         move.l    Breit2(bp),d0
  884.         move.l    Hoehe2(bp),d1
  885.         RECALL    FreeRaster        ; free buffer
  886.         clr.l    Buf(bp)
  887. 4$        lea    BitMap1+8(bp),a2
  888.         move.b    BitMap1+5(bp),d2
  889.         beq.s    1$
  890. 3$        move.l    0(a2),d0
  891.         beq.s    2$            ; nothing !
  892.         move.l    d0,a0
  893.         move.l    Breit2(bp),d0
  894.         move.l    Hoehe2(bp),d1
  895.         RECALL    FreeRaster        ; free bitplane
  896. 2$        clr.l    (a2)+
  897.         subq.b    #1,d2
  898.         bne.s    3$            ; not ready
  899. 1$        movem.l    (sp)+,d2/a2/a6
  900.         rts
  901.  
  902. ;--------------------------------------------------------------------------
  903.  
  904. CloseAboutReq    move.l    AboutReq(bp),d0
  905.         beq.s    1$
  906.         move.l    d0,a0
  907.         CALL    FreeSysRequest,IntBase(bp)
  908.         clr.l    AboutReq(bp)
  909. 1$        rts
  910.  
  911. ;--------------------------------------------------------------------------
  912.  
  913. CloseGfx    bsr.s    NewSize1        ; free gfx stuff
  914.         bsr.s    CloseAboutReq
  915.         bsr.s    CloseAlmWin
  916.         bsr.s    CloseColWin
  917.         move.l    IntBase(bp),a6
  918.         move.l    WinPtr(bp),d0
  919.         beq.s    4$
  920.         move.l    d0,a0
  921.         move.l    a0,-(sp)
  922.         CALL    ClearMenuStrip,IntBase(bp)
  923.         move.l    (sp)+,a0
  924.         RECALL    CloseWindow
  925. 4$        move.l    GadsBase(bp),a6
  926.         move.l    Menus(bp),d0
  927.         beq.s    3$
  928.         move.l    d0,a0
  929.         RECALL    FreeMenus
  930. 3$        move.l    VisualInfo(bp),d0
  931.         beq.s    2$
  932.         move.l    d0,a0
  933.         RECALL    FreeVisualInfo
  934. 2$        move.l    PubScreen(bp),d0
  935.         beq.s    1$
  936.         suba.l    a0,a0
  937.         move.l    d0,a1
  938.         CALL    UnlockPubScreen,IntBase(bp)
  939. 1$        rts
  940.  
  941. ;--------------------------------------------------------------------------
  942.  
  943. CloseAlmWin    lea    AlmWin(bp),a2        ; discard alarm window
  944.         bra.s    CloseWinGT
  945.  
  946. CloseColWin    lea    ColWin(bp),a2        ; discard color window
  947.  
  948. CloseWinGT    move.l    0(a2),d0
  949.         beq.s    1$
  950.         move.l    d0,a0
  951.         CALL    CloseWindow,IntBase(bp)
  952.         clr.l    (a2)+            ; clear pointer !
  953.         move.l    0(a2),a0
  954.         CALL    FreeGadgets,GadsBase(bp)
  955. 1$        rts
  956.  
  957. ***************************************************************************
  958.  
  959. CheckAboutReq    move.l    a6,-(sp)
  960.         move.l    AboutReq(bp),d0
  961.         beq.s    1$
  962.         move.l    d0,a0
  963.         move.l    86(a0),a0
  964.         CALL    GT_GetIMsg,GadsBase(bp)
  965.         move.l    d0,a1
  966.         move.l    a1,d0
  967.         beq.s    1$
  968.         RECALL    GT_ReplyIMsg
  969.         bsr    CloseAboutReq
  970. 1$        move.l    (sp)+,a6
  971.         rts
  972.  
  973. ***************************************************************************
  974.  
  975. CheckAlmWin    movem.l    d2/d3/a2/a3/a6,-(sp)
  976.         move.l    AlmWin(bp),d2
  977.         beq    1$
  978.         move.l    d2,a2
  979. 9$        move.l    86(a2),a0
  980.         CALL    GT_GetIMsg,GadsBase(bp)
  981.         move.l    d0,a1
  982.         move.l    a1,d0
  983.         beq    1$
  984.         move.l    20(a1),d2        ; imCode
  985.         move.w    24(a1),d3        ; imClass
  986.         move.l    28(a1),a3        ; IAdress
  987.         RECALL    GT_ReplyIMsg
  988.         moveq    #($200>>3),d0        ; CLOSEWINDOW
  989.         lsl.w    #3,d0
  990.         cmp.l    d0,d2
  991.         beq.s    2$
  992.         moveq    #$40,d0            ; GADGETUP
  993.         cmp.l    d0,d2
  994.         beq.s    8$
  995.         moveq    #$10,d0            ; MOUSEMOVE
  996.         bne.s    9$
  997. 8$        move.w    38(a3),d0
  998.         subq.w    #1,d0            ; hour slider ?
  999.         bne.s    7$
  1000.         move.w    d3,st(bp)
  1001.         bra.s    9$
  1002. 7$        subq.w    #1,d0            ; minute SLIDER ?
  1003.         bne.s    6$
  1004.         move.w    d3,mi(bp)
  1005.         bra.s    9$
  1006. 6$        subq.w    #1,d0            ; USE ?
  1007.         bne.s    5$
  1008.         move.w    st(bp),alstd(bp)
  1009.         move.w    mi(bp),almin(bp)
  1010.         st    alarm(bp)
  1011.         bra.s    2$
  1012. 5$        subq.w    #1,d0            ; CANCEL ?
  1013.         bne.s    9$
  1014. 2$        bsr    CloseAlmWin
  1015.         tst.b    alarm(bp)
  1016.         beq.s    1$            ; 
  1017.         move.l    Menus(bp),a0
  1018.         move.l    #$8e1,d0        ; FULLMENUNUM(1,7,1);
  1019.         CALL    ItemAddress,IntBase(bp)
  1020.         move.l    d0,a2
  1021.         move.w    #$100,d0
  1022.         and.w    12(a2),d0
  1023.         bne.s    1$            ; already on !
  1024.         move.l    WinPtr(bp),a0
  1025.         RECALL    ClearMenuStrip
  1026.         or.w    #$100,12(a2)        ; item->Flags |= CHECKED;
  1027.         move.l    WinPtr(bp),a0
  1028.         move.l    Menus(bp),a1
  1029.         RECALL    ResetMenuStrip
  1030. 1$        movem.l    (sp)+,d2/d3/a2/a3/a6
  1031.         rts
  1032.  
  1033. ***************************************************************************
  1034.  
  1035. CheckColWin    movem.l    d2/d3/a2/a6,-(sp)
  1036.         move.l    ColWin(bp),d2
  1037.         beq.s    1$
  1038.         move.l    d2,a2
  1039. 3$        move.l    86(a2),a0
  1040.         CALL    GT_GetIMsg,GadsBase(bp)
  1041.         move.l    d0,a1
  1042.         move.l    a1,d0
  1043.         beq.s    1$
  1044.         move.l    20(a1),d2        ; imClass
  1045.         move.w    24(a1),d3        ; imCode
  1046.         RECALL    GT_ReplyIMsg
  1047.         moveq    #($200>>3),d0        ; CLOSEWINDOW
  1048.         lsl.w    #3,d0
  1049.         cmp.l    d0,d2
  1050.         beq.s    2$
  1051.         moveq    #$40,d0            ; GADGETUP
  1052.         cmp.l    d0,d2
  1053.         bne.s    3$
  1054.         move.l    color(bp),a0
  1055.         move.b    d3,0(a0)        ; set new color
  1056.         bsr    SetPattern
  1057.         bsr    Rahmen
  1058.         bsr    ZifferBlatt
  1059.         bsr    Zeichnen
  1060. 2$        bsr    CloseColWin
  1061. 1$        movem.l    (sp)+,d2/d3/a2/a6
  1062.         rts
  1063.  
  1064. ***************************************************************************
  1065.  
  1066. CheckMainWin    movem.l    d2/d3/a2/a3/a6,-(sp)
  1067. 4$        move.l    WinPtr(bp),a0        ; while (GT_GetIMsg(window->UserPort)))
  1068.         move.l    86(a0),a0
  1069.         CALL    GT_GetIMsg,GadsBase(bp)
  1070.         move.l    d0,a1
  1071.         move.l    a1,d0
  1072.         beq.s    1$            ; no msg !
  1073.         move.l    20(a1),imClass(bp)
  1074.         move.w    24(a1),imCode+2(bp)
  1075.         RECALL    GT_ReplyIMsg
  1076.         move.l    IntBase(bp),a6        ; load libbase reg
  1077.         move.l    imClass(bp),d3
  1078.         moveq    #0,d0
  1079.         moveq    #2,d2
  1080.         cmp.l    d2,d3
  1081.         beq    3$            ; CASE NEWSIZE
  1082.         moveq    #2,d0
  1083.         moveq    #4,d2
  1084.         cmp.l    d2,d3
  1085.         beq.s    3$            ; CASE REFRESHWINDOW
  1086.         moveq    #4,d0
  1087.         moveq    #($100>>2),d2
  1088.         add.w    d2,d2
  1089.         add.w    d2,d2
  1090.         cmp.l    d2,d3
  1091.         beq.s    3$            ; CASE MENUPICK
  1092.         moveq    #6,d0
  1093.         add.l    d2,d2
  1094.         cmp.l    d2,d3
  1095.         beq.s    3$            ; case CLOSEWINDOW
  1096.         moveq    #8,d0
  1097.         moveq    #1,d1
  1098.         moveq    #4,d2
  1099.         swap    d2
  1100.         cmp.l    d2,d3
  1101.         beq.s    3$            ; CASE ACTIVEWINDOW
  1102.         moveq    #0,d1
  1103.         add.l    d2,d2
  1104.         cmp.l    d2,d3
  1105.         bne.s    2$            ; not CASE INACTIVEWINDOW
  1106. 3$        move.w    msgTab(pc,d0.w),d0
  1107.         jsr    msgTab(pc,d0.w)
  1108. 2$        tst.b    EndAll(bp)
  1109.         beq.s    4$            ; not quit !
  1110. 1$        movem.l    (sp)+,d2/d3/a2/a3/a6
  1111.         rts
  1112.  
  1113. msgTab        ADDCMD    msg,NewSize,0
  1114.         ADDCMD    msg,Refresh
  1115.         ADDCMD    msg,MenuPick
  1116.         ADDCMD    msg,CloseWin
  1117.         ADDCMD    msg,ActInact
  1118.  
  1119. ;--------------------------------------------------------------------------
  1120.  
  1121. msgNewSize    bsr    NewSize1
  1122.         bsr    NewSize2
  1123.         beq.s    msgCloseErr        ; error !
  1124.         bsr    Rahmen
  1125.         bsr    ZifferBlatt
  1126.         bra    Zeichnen
  1127.  
  1128. ;--------------------------------------------------------------------------
  1129.  
  1130. msgRefresh    move.l    BoLeft(bp),d0
  1131.         move.l    d0,ReDrawx1(bp)
  1132.         move.l    BoTop(bp),d1
  1133.         move.l    d1,ReDrawy1(bp)
  1134.         add.l    Breit2(bp),d0
  1135.         subq.l    #1,d0
  1136.         move.l    d0,ReDrawx2(bp)
  1137.         add.l    Hoehe2(bp),d1
  1138.         subq.l    #1,d1
  1139.         move.l    d1,ReDrawy2(bp)
  1140.         move.l    WinPtr(bp),a0
  1141.         RECALL    BeginRefresh
  1142.         bsr    Rahmen
  1143.         bsr    Zeichnen
  1144.         moveq    #1,d0
  1145.         move.l    WinPtr(bp),a0
  1146.         jmp    _LVOEndRefresh(a6)
  1147.  
  1148. ;--------------------------------------------------------------------------
  1149.  
  1150. msgCloseWin    tst.b    closegad(bp)
  1151.         beq.s    msgCloseErr+4        ; close gadget off !
  1152.  
  1153. msgCloseErr    st    EndAll(bp)
  1154.         rts
  1155.  
  1156. ;--------------------------------------------------------------------------
  1157.  
  1158. msgActInact    move.b    d1,Active(bp)
  1159.         bra    Rahmen
  1160.  
  1161. ;--------------------------------------------------------------------------
  1162.  
  1163. msgMenuPick    move.l    imCode(bp),d2        ; while (code != MENUNULL) {
  1164.         cmpi.w    #-1,d2
  1165.         beq.s    1$
  1166.         move.l    d2,d0
  1167.         move.l    Menus(bp),a0
  1168.         CALL    ItemAddress,IntBase(bp)
  1169.         move.l    d0,a2
  1170.         move.w    32(a2),imCode+2(bp)
  1171.         moveq    #$1f,d0
  1172.         and.w    d2,d0            ; MENUNUM
  1173.         add.w    d0,d0            ; now index !
  1174.         move.w    d2,d1
  1175.         lsr.w    #5,d1
  1176.         andi.w    #$3f,d1            ; ITEMNUM
  1177.         lsr.w    #8,d2
  1178.         lsr.w    #3,d2
  1179.         andi.w    #$1f,d2            ; SUBNUM
  1180.         move.w    menuTab(pc,d0.w),d0
  1181.         jsr    menuTab(pc,d0.w)    ; execute CASE
  1182.         bsr    msgNewSize
  1183.         bne.s    msgMenuPick        ; no error !
  1184. 1$        rts                ; }
  1185.  
  1186. menuTab        ADDCMD    menu,Project,0
  1187.         ADDCMD    menu,Settings
  1188.         ADDCMD    menu,Colors
  1189.         ADDCMD    menu,Pattern
  1190.  
  1191. ;--------------------------------------------------------------------------
  1192.  
  1193. menuProject    add.w    d1,d1            ; now index !
  1194.         move.w    projectTab(pc,d1.w),d1
  1195.         jmp    projectTab(pc,d1.w)
  1196.  
  1197. projectTab    ADDCMD    project,About,0
  1198.         ADDCMD    project,Save
  1199.         dc.w    msgCloseErr-projectTab    ; quit really !
  1200.  
  1201. projectAbout    tst.l    AboutReq(bp)
  1202.         bne.s    1$
  1203.         lea    EasyBuf(bp),a2
  1204.         moveq    #20,d0
  1205.         move.l    d0,(a2)+        ; structSize
  1206.         clr.l    (a2)+            ; flags
  1207.         moveq    #About,d0
  1208.         bsr    GetLocStr
  1209.         move.l    d0,(a2)+        ; reqTitle
  1210.         lea    ProgName(pc),a0
  1211.         move.l    a0,(a2)+        ; reqText
  1212.         moveq    #Description,d0
  1213.         bsr    GetLocStr
  1214.         move.l    d0,(a2)            ; gadText
  1215.         moveq    #0,d0
  1216.         move.l    WinPtr(bp),a0
  1217.         lea    EasyBuf(bp),a1
  1218. ;        suba.l    a3,a3            ; we don't have args !
  1219.         RECALL    BuildEasyRequestArgs
  1220.         move.l    d0,AboutReq(bp)
  1221. 1$        rts
  1222.  
  1223. ;--------------------------------------------------------------------------
  1224.  
  1225. menuSettings    add.w    d1,d1            ; now index !
  1226.         move.w    settingsTab(pc,d1.w),d1
  1227.         moveq    #1,d0
  1228.         and.b    12(a2),d0        ; checked=item.Flags&CHECKED;
  1229.         jmp    settingsTab(pc,d1.w)
  1230.  
  1231. settingsTab    ADDCMD    settings,Secs,0
  1232.         ADDCMD    settings,Oval
  1233.         ADDCMD    settings,Show
  1234.         ADDCMD    settings,Hands
  1235.         ADDCMD    settings,Shadow
  1236.         ADDCMD    settings,Border
  1237.         ADDCMD    settings,Chime
  1238.         ADDCMD    settings,Alarm
  1239.         ADDCMD    settings,CloseG
  1240.  
  1241. settingsSecs    move.b    d0,sekunden(bp)        ; seconds on/off
  1242.         tst.b    TimerSent(bp)
  1243.         beq.s    1$
  1244.         move.l    TimerIO(bp),a1
  1245.         CALL    AbortIO,SysBase(bp)
  1246.         move.l    TimerIO(bp),a1
  1247.         RECALL    WaitIO
  1248.         clr.b    TimerSent(bp)
  1249. 1$        bra    NextTick
  1250.  
  1251. settingsOval    move.b    d0,oval(bp)        ; rectangle/oval
  1252.         rts
  1253.  
  1254. settingsShow    beq.s    1$            ; zifferblatt
  1255.         move.b    d2,zeigen(bp)
  1256. 1$        rts
  1257.  
  1258. settingsHands    beq.s    1$            ; hands
  1259.         lea    zeigerbreite(bp),a2
  1260.         subq.w    #5,d2
  1261.         bcc.s    2$            ; 5-9
  1262.         addq.w    #5,d2
  1263.         lea    zeigertyp(bp),a2
  1264. 2$        move.b    d2,0(a2)
  1265. 1$        rts
  1266.  
  1267. settingsShadow    move.b    d0,schatten(bp)        ; shadow on/off
  1268.         rts
  1269.  
  1270. settingsBorder    lea    interlace(bp),a0    ; border type
  1271.         subq.w    #5,d2
  1272.         beq.s    2$
  1273.         lea    hires(bp),a0
  1274.         addq.w    #1,d2
  1275.         beq.s    2$
  1276.         tst.b    d0
  1277.         beq.s    1$
  1278.         lea    rahmenanz(bp),a0
  1279.         addq.w    #4,d2
  1280.         move.w    d2,d0
  1281. 2$        move.b    d0,0(a0)        ; interlace,hires or rahmenanz
  1282. 1$        rts
  1283.  
  1284. settingsChime    lea    smarthour(bp),a0    ; chime
  1285.         subq.w    #4,d2
  1286.         beq.s    2$
  1287.         tst.b    d0
  1288.         beq.s    1$
  1289.         lea    chime(bp),a0
  1290.         addq.w    #4,d2
  1291.         move.w    d2,d0
  1292. 2$        move.b    d0,0(a0)        ; smarthour or chime
  1293. 1$        rts
  1294.  
  1295. settingsAlarm    subq.w    #1,d2            ; which subitem ?
  1296.         bcc.s    alarmOn
  1297.  
  1298. alarmSet    tst.l    AlmWin(bp)
  1299.         bne.s    1$            ; already open !
  1300.         suba.l    a1,a1
  1301.         pea    almgadtags2(pc)
  1302.         pea    2            ; TAG_MORE,almgadtags2
  1303.         pea    fmt5(pc)
  1304.         pea    $8008002A        ; GSTL_Format,fmt5
  1305.         moveq    #0,d1
  1306.         move.w    almin(bp),d1
  1307.         move.l    d1,-(sp)
  1308.         pea    $80080028        ; GSTL_Level,minute
  1309.         move.l    sp,d1
  1310.         suba.l    a0,a0
  1311.         pea    almgadtags1(pc)
  1312.         pea    2            ; TAG_MORE,almgadtags1
  1313.         pea    fmt4(pc)
  1314.         pea    $8008002A        ; GSTL_Format,fmt4
  1315.         moveq    #0,d0
  1316.         move.w    alstd(bp),d0
  1317.         move.l    d0,-(sp)
  1318.         pea    $80080028        ; GSTL_Level,hour
  1319.         move.l    sp,d0
  1320.         movem.l    d0/d1/a0/a1,-(sp)
  1321.         lea    almwintab(pc),a0
  1322.         move.l    sp,a1            : **ptr
  1323.         bsr    CreateRequest
  1324.         lea    16*4(sp),sp
  1325.         movem.l    d0/d1,AlmWin(bp)    ; store window && gadgets
  1326. 1$        rts
  1327.  
  1328. alarmOn        move.b    d0,alarm(bp)        ; alarm on/off
  1329.         rts
  1330.  
  1331. settingsCloseG    move.b    d0,closegad(bp)        ; close gadget on/off
  1332.         rts
  1333.  
  1334. ;--------------------------------------------------------------------------
  1335.  
  1336. menuColors    lea    Pens(bp),a1        ; colors
  1337.         bra.s    GetColor
  1338.  
  1339. ;--------------------------------------------------------------------------
  1340.  
  1341. menuPattern    lea    Must(bp),a1        ; pattern
  1342.  
  1343. ;--------------------------------------------------------------------------
  1344.  
  1345. GetColor    tst.l    ColWin(bp)        ; already open ?
  1346.         bne.s    1$
  1347.         lea    0(a1,d1.w),a1        ; color entry
  1348.         move.l    a1,color(bp)
  1349.         lea    colwintab(pc),a0
  1350.         moveq    #0,d0            ; TAG_DONE
  1351.         move.l    d0,-(sp)
  1352.         move.b    BitMap1+5(bp),d0
  1353.         move.l    d0,-(sp)
  1354.         pea    $80080010        ; GTPA_Depth
  1355.         move.l    sp,-(sp)
  1356.         move.l    sp,a1            ; **ptr
  1357.         bsr    CreateRequest
  1358.         lea    16(sp),sp
  1359.         movem.l    d0/d1,ColWin(bp)    ; store window && gadgets
  1360. 1$        rts
  1361.  
  1362. ***************************************************************************
  1363.  
  1364. NextTick    movem.l    d2/d3/d4/a2/a6,-(sp)
  1365.         move.l    TimerIO(bp),a2
  1366.         lea    32(a2),a0
  1367.         CALL    GetSysTime,20(a2)
  1368.         move.l    32(a2),d2
  1369.         move.l    #1100000,d0
  1370.         sub.l    36(a2),d0
  1371.         move.l    d0,36(a2)        ; tv_micro
  1372.         moveq    #0,d0
  1373.         tst.b    sekunden(bp)
  1374.         bne.s    1$
  1375.         move.l    d2,d0
  1376.         moveq    #60,d1
  1377.         bsr    LDiv            ; sec = 59-sec%60
  1378.         moveq    #59,d0
  1379.         sub.l    d1,d0
  1380. 1$        move.l    d0,32(a2)        ; tv_secs
  1381.         move.w    #9,28(a2)
  1382.         move.l    a2,a1
  1383.         CALL    SendIO,SysBase(bp)    ; TR_ADDREQUEST
  1384.         st    TimerSent(bp)
  1385.         move.w    min(bp),d4        ; oldmin
  1386.         move.l    d2,d0
  1387.         moveq    #60,d1
  1388.         bsr    LDiv            ; min = sec/60
  1389.         exg.l    d0,d2
  1390.         moveq    #60,d1
  1391.         bsr    LDiv            ; sec = sec%60
  1392.         move.w    d1,sec(bp)
  1393.         move.l    d2,d0
  1394.         moveq    #12,d1
  1395.         bsr    LDiv            ; std = min/12
  1396.         move.l    d0,d3
  1397.         move.l    d2,d0
  1398.         moveq    #60,d1
  1399.         bsr    LDiv            ; min = min%60
  1400.         move.w    d1,min(bp)
  1401.         move.l    d3,d0
  1402.         moveq    #60,d1
  1403.         bsr    LDiv            ; std = std%60
  1404.         move.w    d1,std(bp)
  1405.         move.w    min(bp),d0
  1406.         sub.w    d4,d0            ; oldmin != min
  1407.         movem.l    (sp)+,d2/d3/d4/a2/a6
  1408.         rts
  1409.  
  1410. ;--------------------------------------------------------------------------
  1411.  
  1412. SetAPen        ext.w    d0            ; set pen
  1413.         ext.l    d0
  1414.         move.l    a2,a1
  1415.         jmp    _LVOSetAPen(a6)
  1416.  
  1417. Move        move.l    a2,a1            ; moveto
  1418.         jmp    _LVOMove(a6)
  1419.  
  1420. Draw        move.l    a2,a1            ; drawto
  1421.         jmp    _LVODraw(a6)
  1422.  
  1423. Rahmen        movem.l    d2-d7/a2/a6,-(sp)
  1424.         move.l    GfxBase(bp),a6        ; setup regs
  1425.         move.l    RPort1(bp),a2
  1426.         move.l    Breite(bp),d4
  1427.         move.l    Hoehe(bp),d5
  1428.         move.b    rahmenanz(bp),d7
  1429.         beq    1$            ; no border ...
  1430.         move.b    Pens+11(bp),d2
  1431.         move.b    Pens+12(bp),d3
  1432.         tst.b    Active(bp)
  1433.         beq.s    4$
  1434.         cmpi.b    #1,d7            ; rahmenanz
  1435.         bne.s    4$
  1436.         exg.l    d2,d3
  1437. 4$        move.b    d2,d0
  1438.         bsr.s    SetAPen            ; SetAPen(rp,a?b:c);
  1439.         moveq    #1,d0
  1440.         moveq    #-1,d1
  1441.         add.l    d5,d1
  1442.         bsr.s    Move            ; Move(rp,1,hoehe-1);
  1443.         moveq    #-1,d0
  1444.         add.l    d4,d0
  1445.         moveq    #-1,d1
  1446.         add.l    d5,d1
  1447.         bsr.s    Draw            ; Draw(rp,breite-1,hoehe-1);
  1448.         moveq    #-1,d0
  1449.         add.l    d4,d0
  1450.         moveq    #1,d1
  1451.         bsr.s    Draw            ; Draw(rp,breite-1,1);
  1452.         move.b    d3,d0
  1453.         bsr.s    SetAPen            ; SetAPen(rp,a?c:b);
  1454.         moveq    #0,d0
  1455.         moveq    #-1,d1
  1456.         add.l    d5,d1
  1457.         bsr.s    Move            ; Move(rp,0,hoehe-1);
  1458.         moveq    #0,d0
  1459.         moveq    #0,d1
  1460.         bsr.s    Draw            ; Draw(rp,0,0);
  1461.         moveq    #-1,d0
  1462.         add.l    d4,d0
  1463.         moveq    #0,d1
  1464.         bsr.s    Draw            ; Draw(rp,breite-1,0);
  1465.         cmpi.b    #2,d7
  1466.         bne    1$
  1467.         move.l    BoLeft(bp),d6
  1468.         move.l    BoTop(bp),d7
  1469.         move.b    Pens+12(bp),d0
  1470.         bsr    SetAPen            ; SetAPen(rp,pens[12]);
  1471.         move.l    d6,d0
  1472.         move.l    d5,d1
  1473.         sub.l    d7,d1
  1474.         bsr    Move            ; Move(rp,boleft,hoehe-botop);
  1475.         move.l    d4,d0
  1476.         sub.l    d6,d0
  1477.         move.l    d5,d1
  1478.         sub.l    d7,d1
  1479.         bsr    Draw            ; Draw(rp,breite-boleft,hoehe-botop);
  1480.         move.l    d4,d0
  1481.         sub.l    d6,d0
  1482.         move.l    d7,d1
  1483.         bsr    Draw            ; Draw(rp,breite-boleft,botop);
  1484.         move.b    Pens+11(bp),d0
  1485.         bsr    SetAPen
  1486.         moveq    #-1,d0
  1487.         add.l    d6,d0
  1488.         move.l    d5,d1
  1489.         sub.l    d7,d1
  1490.         bsr    Move            ; Move(rp,boleft-1,hoehe-botop);
  1491.         moveq    #-1,d0
  1492.         add.l    d6,d0
  1493.         moveq    #-1,d1
  1494.         add.l    d7,d1
  1495.         bsr    Draw            ; Draw(rp,boleft-1,botop-1);
  1496.         move.l    d4,d0
  1497.         sub.l    d6,d0
  1498.         moveq    #-1,d1
  1499.         add.l    d7,d1
  1500.         bsr    Draw            ; Draw(rp,breite-boleft,botop-1);
  1501.         move.b    Pens+10(bp),d0
  1502.         tst.b    Active(bp)
  1503.         beq.s    3$            ; window not active 
  1504.         move.b    Pens+13(bp),d0
  1505. 3$        bsr    SetAPen
  1506.         tst.b    hires(bp)
  1507.         beq.s    2$
  1508.         moveq    #1,d0
  1509.         moveq    #1,d1
  1510.         moveq    #2,d2
  1511.         moveq    #-2,d3
  1512.         add.l    d5,d3
  1513.         bsr.s    RectFill        ; RectFill(rp,1,1,2,hoehe-2);
  1514.         moveq    #-3,d0
  1515.         add.l    d4,d0
  1516.         moveq    #1,d1
  1517.         moveq    #-2,d2
  1518.         add.l    d4,d2
  1519.         moveq    #-2,d3
  1520.         add.l    d5,d3
  1521.         bsr.s    RectFill        ; RectFill(rp,breite-3,1,breite-2,hoehe-2);
  1522. 2$        tst.b    interlace(bp)
  1523.         beq.s    1$
  1524.         moveq    #1,d0
  1525.         moveq    #1,d1
  1526.         moveq    #-2,d2
  1527.         add.l    d4,d2
  1528.         moveq    #2,d3
  1529.         bsr.s    RectFill        ; RectFill(rp,1,1,breite-2,2);
  1530.         moveq    #1,d0
  1531.         moveq    #-3,d1
  1532.         add.l    d5,d1
  1533.         moveq    #-2,d2
  1534.         add.l    d4,d2
  1535.         moveq    #-2,d3
  1536.         add.l    d5,d3
  1537.         bsr.s    RectFill        ; RectFill(rp,1,hoehe-3,breite-2,hoehe-2);
  1538. 1$        move.b    Pens+0(bp),d0
  1539.         bsr    SetAPen            ; SetAPen(rp,pens[0]);
  1540.         movem.l    (sp)+,d2-d7/a2/a6
  1541.         rts
  1542.  
  1543. RectFill    move.l    a2,a1            ; fill rectangle
  1544.         jmp    _LVORectFill(a6)
  1545.  
  1546. ;--------------------------------------------------------------------------
  1547.  
  1548. NewSize2    movem.l    d2/d3/a2/a6,-(sp)
  1549.         moveq    #2,d1            ; cmp value
  1550.         move.b    rahmenanz(bp),d0
  1551.         tst.b    hires(bp)
  1552.         beq.s    9$
  1553.         cmp.b    d1,d0
  1554.         bne.s    9$
  1555.         moveq    #4,d0
  1556. 9$        move.b    d0,BoLeft+3(bp)
  1557.         move.b    rahmenanz(bp),d0
  1558.         tst.b    interlace(bp)
  1559.         beq.s    8$
  1560.         cmp.b    d1,d0
  1561.         bne.s    8$
  1562.         moveq    #4,d0
  1563. 8$        move.b    d0,BoTop+3(bp)
  1564.         move.l    WinPtr(bp),a0
  1565.         move.w    8(a0),Breite+2(bp)    ; window->width
  1566.         move.w    10(a0),Hoehe+2(bp)    ; window->height
  1567.         move.l    BoLeft(bp),d0
  1568.         add.l    d0,d0
  1569.         sub.l    Breite(bp),d0
  1570.         neg.l    d0
  1571.         move.l    d0,Breit2(bp)        ; Breit2 = Breite-BoLeft<<1
  1572.         move.l    BoTop(bp),d0
  1573.         add.l    d0,d0
  1574.         sub.l    Hoehe(bp),d0
  1575.         neg.l    d0
  1576.         move.l    d0,Hoehe2(bp)        ; Hoehe2 = Hoehe-BoTop<<1
  1577.         moveq    #12,d2            ; cmp value
  1578.         moveq    #-2,d1            ; cmp value
  1579.         moveq    #0,d0
  1580.         cmp.w    xMask+2(bp),d1
  1581.         bne.s    7$
  1582.         cmp.l    Breit2(bp),d2
  1583.         bcc.s    7$            ; <= 12 !
  1584.         moveq    #1,d0
  1585. 7$        move.b    d0,xDouble(bp)        ; set value
  1586.         moveq    #0,d0
  1587.         cmp.w    yMask+2(bp),d1
  1588.         bne.s    6$
  1589.         cmp.l    Hoehe2(bp),d2
  1590.         bcc.s    6$            ; <= 12 !
  1591.         moveq    #1,d0
  1592. 6$        move.b    d0,yDouble(bp)        ; set value
  1593.         moveq    #0,d0
  1594.         moveq    #25,d1
  1595.         cmp.l    Breit2(bp),d1
  1596.         bcc.s    5$            ; <= 25 !
  1597.         moveq    #1,d0
  1598.         add.l    d1,d1
  1599.         cmp.l    Breit2(bp),d1
  1600.         bcc.s    5$            ; <= 50 !
  1601.         moveq    #2,d0
  1602. 5$        move.w    d0,xOffset(bp)        ; set value
  1603.         moveq    #0,d0
  1604.         moveq    #25,d1
  1605.         cmp.l    Hoehe2(bp),d1
  1606.         bcc.s    4$            ; <= 25 !
  1607.         moveq    #1,d0
  1608.         add.l    d1,d1
  1609.         cmp.l    Hoehe2(bp),d1
  1610.         bcc.s    4$            ; <= 50 !
  1611.         moveq    #2,d0
  1612. 4$        move.w    d0,yOffset(bp)        ; set value
  1613.         move.l    Breite(bp),d0
  1614.         move.l    Hoehe(bp),d1
  1615.         cmp.l    d1,d0
  1616.         bcs.s    3$
  1617.         move.l    d1,d0
  1618. 3$        asr.w    #3,d0
  1619.         cmp.w    GadSize(bp),d0
  1620.         beq.s    10$            ; don't update gadgets
  1621.         move.w    d0,GadSize(bp)
  1622.         move.l    WinPtr(bp),a0
  1623.         lea    GadgetBuf(bp),a1
  1624.         moveq    #-1,d0
  1625.         CALL    RemoveGList,IntBase(bp)    ; remove gadgets
  1626.         lea    sizes(pc),a0
  1627.         lea    GadgetBuf(bp),a1
  1628.         moveq    #3,d3
  1629. 2$        moveq    #3,d2
  1630.         moveq    #4,d1
  1631. 1$        move.b    (a0)+,d0
  1632.         ext.w    d0
  1633.         muls    GadSize(bp),d0
  1634.         move.w    d0,0(a1,d1.w)        ; set new positions
  1635.         addq.w    #2,d1
  1636.         dbra    d2,1$
  1637.         lea    44(a1),a1
  1638.         dbra    d3,2$
  1639.         move.l    WinPtr(bp),a0
  1640.         lea    GadgetBuf(bp),a1
  1641.         moveq    #0,d0
  1642.         moveq    #4,d1
  1643.         moveq    #0,d2
  1644.         RECALL    AddGList        ; add gadgets again
  1645. 10$        lea    RPort2(bp),a1
  1646.         CALL    InitRastPort,GfxBase(bp)
  1647.         moveq    #0,d0
  1648.         move.l    PubScreen(bp),a0
  1649.         move.b    189(a0),d0        ; BitMap.Depth
  1650.         move.l    Breit2(bp),d1
  1651.         move.l    Hoehe2(bp),d2
  1652.         lea    BitMap1(bp),a0
  1653.         RECALL    InitBitMap
  1654.         lea    BitMap1+8(bp),a2
  1655.         move.b    BitMap1+5(bp),d2
  1656. 11$        move.l    Breit2(bp),d0
  1657.         move.l    Hoehe2(bp),d1
  1658.         RECALL    AllocRaster
  1659.         move.l    d0,(a2)+
  1660.         beq.s    12$            ; error no mem !
  1661.         subq.b    #1,d2
  1662.         bne.s    11$
  1663.         lea    BitMap1(bp),a0
  1664.         move.l    a0,RPort2+4(bp)        ; RastPort.BitMap = BitMap
  1665.         move.l    Breit2(bp),d0
  1666.         move.l    Hoehe2(bp),d1
  1667.         RECALL    AllocRaster
  1668.         move.l    d0,a1
  1669.         move.l    a1,Buf(bp)
  1670.         beq.s    12$            ; no bitplane !
  1671.         lea    TempRas(bp),a0
  1672.         moveq    #15,d1            ; RASSIZE(Breite,Hoehe)
  1673.         add.w    Breit2+2(bp),d1
  1674.         asr.w    #3,d1
  1675.         moveq    #-2,d0
  1676.         and.w    d1,d0
  1677.         mulu    Hoehe2+2(bp),d0
  1678.         RECALL    InitTmpRas
  1679.         move.l    d0,RPort2+12(bp)    ; RastPort.TmpRas = TempRas
  1680.         lea    AreaInf(bp),a0
  1681.         lea    Table(bp),a1
  1682.         moveq    #5,d0
  1683.         RECALL    InitArea
  1684.         lea    AreaInf(bp),a0
  1685.         move.l    a0,RPort2+16(bp)    ; RastPort.AreaInfo = AreaInf
  1686. 12$        movem.l    (sp)+,d2/d3/a2/a6
  1687.         rts
  1688.  
  1689. ;--------------------------------------------------------------------------
  1690.  
  1691. ZifferBlatt    movem.l    d2-d7/a2/a3/a6,-(sp)
  1692.         subq.w    #8,sp            ; local vars
  1693.         move.l    GfxBase(bp),a6
  1694.         lea    RPort2(bp),a2
  1695.         move.l    Breit2(bp),d4
  1696.         move.l    Hoehe2(bp),d5
  1697.         andi.w    #$fff7,32(a2)        ; BNDRYOFF(RastPort)
  1698.         moveq    #-1,d0
  1699.         bsr    SetAPen
  1700.         lea    Muster(bp),a0        ; SetAfPt(RastPort,Muster,Anz)
  1701.         move.l    a0,8(a2)
  1702.         st    29(a2)
  1703.         moveq    #0,d0
  1704.         moveq    #0,d1
  1705.         moveq    #-1,d2
  1706.         add.l    d4,d2
  1707.         moveq    #-1,d3
  1708.         add.l    d5,d3
  1709.         bsr    RectFill
  1710.         clr.l    8(a2)            ; SetAfPt(RastPort,Muster,Anz)
  1711.         clr.b    29(a2)
  1712.         moveq    #1,d6            ; a=(zeigen>1?(zeigen==3?60:15):(zeigen?5:1));
  1713.         move.b    zeigen(bp),d0
  1714.         beq.s    9$
  1715.         moveq    #5,d6
  1716.         cmpi.b    #1,d0
  1717.         beq.s    9$
  1718.         moveq    #15,d6
  1719.         cmpi.b    #3,d0
  1720.         bne.s    9$
  1721.         moveq    #60,d6
  1722. 9$        cmpi.b    #4,d0
  1723.         bcc    2$            ; zeigen >= 4 !
  1724.         moveq    #0,d7
  1725. 8$        lea    srect(pc),a3
  1726.         tst.b    oval(bp)
  1727.         beq.s    7$
  1728.         lea    sinus(pc),a3
  1729. 7$        move.l    d4,d2
  1730.         asr.l    #1,d2
  1731.         move.b    0(a3,d7.w),d0
  1732.         ext.w    d0
  1733.         muls    d4,d0
  1734.         divs    #300,d0
  1735.         and.l    xMask(bp),d0
  1736.         add.l    d0,d2            ; x=x0+(array[i]*Breit2/300)&xMask
  1737.         move.l    d5,d3
  1738.         asr.l    #1,d3
  1739.         move.b    60(a3,d7.w),d0
  1740.         ext.w    d0
  1741.         muls    d5,d0
  1742.         divs    #300,d0
  1743.         and.l    yMask(bp),d0
  1744.         sub.l    d0,d3            ; y=y0-(array[i]*Hoehe2/300)&yMask
  1745.         move.l    d7,d0            ; if (i%5) { draw minute }
  1746.         divu    #5,d0
  1747.         swap    d0
  1748.         tst.w    d0
  1749.         beq    5$
  1750.         subq.w    #1,d0            ; if (i%5==1)
  1751.         bne.s    6$
  1752.         move.b    Pens+9(bp),d0
  1753.         bsr    SetPens            ; set apen + open
  1754. 6$        move.l    d4,d0
  1755.         moveq    #100,d1
  1756.         add.w    d1,d1
  1757.         bsr    LDiv
  1758.         move.l    d0,0(sp)        ; Breit2/200
  1759.         move.l    d5,d0
  1760.         moveq    #100,d1
  1761.         add.w    d1,d1
  1762.         bsr    LDiv
  1763.         move.l    d0,4(sp)        ; Hoehe2/200
  1764.         move.l    d2,d0
  1765.         add.l    0(sp),d0
  1766.         move.l    d3,d1
  1767.         bsr    AreaMove
  1768.         move.l    d2,d0
  1769.         move.l    d3,d1
  1770.         add.l    4(sp),d1
  1771.         bsr    AreaDraw
  1772.         move.l    d2,d0
  1773.         sub.l    0(sp),d0
  1774.         move.l    d3,d1
  1775.         bsr    AreaDraw
  1776.         move.l    d2,d0
  1777.         move.l    d3,d1
  1778.         sub.l    4(sp),d1
  1779.         bsr    AreaDraw
  1780.         bra.s    4$
  1781. 5$        swap    d0            ; else { draw hour }
  1782.         lea    dx1(pc),a3
  1783.         lea    0(a3,d0.w),a3        ; calc table entry
  1784.         lea    pent(pc),a0
  1785.         move.b    0(a0,d0.w),d0
  1786.         lea    Pens(bp),a0
  1787.         move.b    0(a0,d0.w),d0
  1788.         bsr    SetPens            ; set apen + open
  1789.         bsr    MoveHour
  1790.         bsr    DrawHour
  1791.         bsr    DrawHour
  1792.         bsr    DrawHour
  1793. 4$        bsr    AreaEnd
  1794.         add.l    d6,d7
  1795.         moveq    #59,d0
  1796.         cmp.l    d7,d0
  1797.         bcc    8$            ; not ready
  1798. 2$        tst.b    schatten(bp)
  1799.         beq.s    1$
  1800.         move.w    std(bp),0(sp)
  1801.         move.w    #440,2(sp)
  1802.         move.b    Pens+5(bp),d0        ; apen && open
  1803.         move.b    d0,4(sp)
  1804.         move.b    d0,5(sp)
  1805.         st    6(sp)
  1806.         bsr    Zeiger
  1807.         move.w    min(bp),0(sp)
  1808.         move.w    #300,2(sp)
  1809.         bsr    Zeiger
  1810. 1$        move.w    std(bp),0(sp)
  1811.         move.w    #440,2(sp)
  1812.         move.b    Pens+3(bp),4(sp)    ; apen && open
  1813.         move.b    Pens+4(bp),5(sp)
  1814.         clr.b    6(sp)
  1815.         bsr    Zeiger
  1816.         move.w    min(bp),0(sp)
  1817.         move.w    #300,2(sp)
  1818.         move.b    Pens+1(bp),4(sp)
  1819.         move.b    Pens+2(bp),5(sp)
  1820.         bsr    Zeiger
  1821.         move.l    BoLeft(bp),d0        ; set redraw stuff
  1822.         move.l    d0,ReDrawx1(bp)
  1823.         move.l    BoTop(bp),d1
  1824.         move.l    d1,ReDrawy1(bp)
  1825.         add.l    Breit2(bp),d0
  1826.         subq.l    #1,d0
  1827.         move.l    d0,ReDrawx2(bp)
  1828.         add.l    Hoehe2(bp),d1
  1829.         subq.l    #1,d1
  1830.         move.l    d1,ReDrawy2(bp)
  1831.         addq.w    #8,sp
  1832.         movem.l    (sp)+,d2-d7/a2/a3/a6
  1833.         rts
  1834.  
  1835. MoveHour    bsr.s    SetNewXY        ; move hour pos
  1836.         move.l    d2,d0
  1837.         move.l    d3,d1
  1838.  
  1839. AreaMove    move.l    a2,a1            ; area move stub
  1840.         jmp    _LVOAreaMove(a6)
  1841.  
  1842. DrawHour    lea    24(a3),a3        ; draw a hour
  1843.         bsr.s    SetNewXY
  1844.         move.l    d2,d0
  1845.         move.l    d3,d1
  1846.  
  1847. AreaDraw    move.l    a2,a1            ; area draw stub
  1848.         jmp    _LVOAreaDraw(a6)
  1849.  
  1850. AreaEnd        move.l    a2,a1            ; area end stub
  1851.         jmp    _LVOAreaEnd(a6)
  1852.  
  1853. SetNewXY    moveq    #100,d1            ; update x && y
  1854.         move.b    0(a3),d0
  1855.         ext.w    d0
  1856.         muls    d4,d0
  1857.         divs    d1,d0
  1858.         add.w    d0,d2            ; x+=Breit2*dx?[b]/100
  1859.         move.b    12(a3),d0
  1860.         ext.w    d0
  1861.         muls    d5,d0
  1862.         divs    d1,d0
  1863.         add.w    d0,d3            ; y+=Hoehe2*dy?[b]/100
  1864.         rts
  1865.  
  1866. SetPens        move.l    d0,-(sp)        ; save pen number
  1867.         bsr    SetAPen
  1868.         move.l    (sp)+,d0
  1869.  
  1870. SetOPen        cmpi.w    #39,20(a6)        ; SetOPen v39+
  1871.         bcs.s    1$
  1872.         ext.w    d0
  1873.         ext.l    d0
  1874.         move.l    a2,a0
  1875.         jmp    _LVOSetOutlinePen(a6)
  1876. 1$        move.b    d0,27(a2)        ; SetOPen pre v39+
  1877.         or.w    #8,32(a2)
  1878.         rts
  1879.  
  1880. ;--------------------------------------------------------------------------
  1881.  
  1882. Zeiger        lea    4(sp),a0        ; get structure start
  1883.         movem.l    d2-d7/a2/a3/a6,-(sp)
  1884.         move.l    GfxBase(bp),a6
  1885.         move.l    a0,a3            ; save struct ptr
  1886.         lea    RPort2(bp),a2
  1887.         move.l    Breit2(bp),d2
  1888.         move.l    Hoehe2(bp),d3
  1889.         lea    handwidth(pc),a1
  1890.         moveq    #0,d1
  1891.         move.b    zeigerbreite(bp),d1
  1892.         add.w    d1,d1
  1893.         move.w    0(a1,d1.w),d1
  1894.         lea    sinus(pc),a0
  1895.         adda.w    0(a3),a0
  1896.         move.b    60(a0),d7        ; y2
  1897.         ext.w    d7
  1898.         muls    d3,d7
  1899.         divs    2(a3),d7
  1900.         ext.l    d7
  1901.         move.b    0(a0),d6        ; x2
  1902.         ext.w    d6
  1903.         muls    d2,d6
  1904.         divs    2(a3),d6
  1905.         ext.l    d6
  1906.         move.b    0(a0),d5        ; y1
  1907.         ext.w    d5
  1908.         muls    d3,d5
  1909.         divs    d1,d5
  1910.         ext.l    d5
  1911.         move.b    60(a0),d4        ; x1
  1912.         ext.w    d4
  1913.         muls    d2,d4
  1914.         divs    d1,d4
  1915.         ext.l    d4
  1916.         asr.l    #1,d3            ; y0
  1917.         asr.l    #1,d2            , x0
  1918.         tst.b    6(a3)
  1919.         beq.s    1$
  1920.         add.w    yOffset(bp),d3
  1921.         add.w    xOffset(bp),d2
  1922. 1$        move.b    4(a3),d0
  1923.         bsr    SetAPen
  1924.         move.b    5(a3),d0
  1925.         bsr    SetOPen
  1926.         bsr.s    DrawHand
  1927.         movem.l    (sp)+,d2-d7/a2/a3/a6
  1928.         rts
  1929.  
  1930. DrawHand    moveq    #0,d0
  1931.         move.b    zeigertyp(bp),d0
  1932.         beq.s    1$
  1933.         pea    AreaEnd(pc)        ; last area cmd
  1934.         add.w    d0,d0
  1935. 1$        move.w    ZeigerTab(pc,d0.w),d0
  1936.         jmp    ZeigerTab(pc,d0.w)
  1937.  
  1938. ZeigerTab    ADDCMD    Zeiger,0,0        ; CASE line
  1939.         ADDCMD    Zeiger,1        ; case triangle
  1940.         ADDCMD    Zeiger,2        ; case rhombus
  1941.         ADDCMD    Zeiger,3        ; case rectangle
  1942.  
  1943. Zeiger0        move.b    5(a3),d0
  1944.         bsr    SetAPen            ; SetAPen(rp,open)
  1945.         move.l    d2,d0
  1946.         move.l    d3,d1
  1947.         bsr    Move            ; Move(rp,x0,y0)
  1948.         move.l    d2,d0
  1949.         add.l    d6,d0
  1950.         move.l    d3,d1
  1951.         sub.l    d7,d1
  1952.         bsr    Draw            ; Draw(rp,x0+x2,y0-y2)
  1953.         tst.b    xDouble(bp)
  1954.         beq.s    2$
  1955.         moveq    #1,d0
  1956.         add.l    d2,d0
  1957.         move.l    d3,d1
  1958.         bsr    Move            ; Move(rp,x0+1,y0)
  1959.         moveq    #1,d0
  1960.         add.l    d2,d0
  1961.         add.l    d6,d0
  1962.         move.l    d3,d1
  1963.         sub.l    d7,d1
  1964.         bsr    Draw            ; Draw(rp,x0+x2+1,y0-y2)
  1965. 2$        tst.b    yDouble(bp)
  1966.         beq.s    1$
  1967.         move.l    d2,d0
  1968.         moveq    #1,d1
  1969.         add.l    d3,d1
  1970.         bsr    Move            ; Move(rp,x0,y0+1)
  1971.         move.l    d2,d0
  1972.         add.l    d6,d0
  1973.         moveq    #1,d1
  1974.         add.l    d3,d1
  1975.         sub.l    d7,d1
  1976.         bsr    Draw            ; Draw(rp,x0+x2,y0-y2+1)
  1977. 1$        rts
  1978.  
  1979. Zeiger1        move.l    d2,d0
  1980.         add.l    d6,d0
  1981.         move.l    d3,d1
  1982.         sub.l    d7,d1
  1983.         bsr    AreaMove        ; AreMove(rp,x0+x2,y0-y2);
  1984.         move.l    d6,d0
  1985.         asr.l    #2,d0
  1986.         neg.l    d0
  1987.         add.l    d4,d0
  1988.         add.l    d2,d0
  1989.         move.l    d7,d1
  1990.         asr.l    #2,d1
  1991.         add.l    d5,d1
  1992.         add.l    d3,d1
  1993.         bsr    AreaDraw        ; AreaMove(rp,x0+x1-x2/4,y0+y1+y2/4);
  1994.         move.l    d6,d0
  1995.         asr.l    #2,d0
  1996.         neg.l    d0
  1997.         sub.l    d4,d0
  1998.         add.l    d2,d0
  1999.         move.l    d7,d1
  2000.         asr.l    #2,d1
  2001.         sub.l    d5,d1
  2002.         add.l    d3,d1
  2003.         bra    AreaDraw        ; AreaDraw(rp,x0-x1-x2/4,y0-y1+y2/4);
  2004.  
  2005. Zeiger2        move.l    d2,d0
  2006.         add.l    d6,d0
  2007.         move.l    d3,d1
  2008.         sub.l    d7,d1
  2009.         bsr    AreaMove        ; AreMove(rp,x0+x2,y0-y2);
  2010.         move.l    d2,d0
  2011.         add.l    d4,d0
  2012.         move.l    d3,d1
  2013.         add.l    d5,d1
  2014.         bsr    AreaDraw        ; AreaDraw(rp,x0+x1,y0+y1);
  2015.         move.l    d6,d0
  2016.         asr.l    #2,d0
  2017.         neg.l    d0
  2018.         add.l    d2,d0
  2019.         move.l    d7,d1
  2020.         asr.l    #2,d1
  2021.         add.l    d3,d1
  2022.         bsr    AreaDraw        ; AreaDraw(rp,x0-x2/4,y0+y2/4);
  2023. ;        move.l    d2,d0
  2024. ;        sub.l    d4,d0
  2025. ;        move.l    d3,d1
  2026. ;        sub.l    d5,d1
  2027. ;        bra    AreaDraw        ; AreaDraw(rp,x0-x1,y0-y1);
  2028.         bra.s    Zeiger23
  2029.  
  2030. Zeiger3        move.l    d4,d0
  2031.         asr.l    #1,d0
  2032.         sub.l    d0,d2
  2033.         add.l    d6,d2
  2034.         move.l    d2,d0
  2035.         move.l    d5,d1
  2036.         asr.l    #1,d1
  2037.         add.l    d7,d1
  2038.         sub.l    d1,d3
  2039.         move.l    d3,d1
  2040.         bsr    AreaMove        ; AreMove(rp,x0+=x2-x1/2,y0-=y2+y1/2);
  2041.         add.l    d4,d2
  2042.         move.l    d2,d0
  2043.         add.l    d5,d3
  2044.         move.l    d3,d1
  2045.         bsr    AreaDraw        ; AreaDraw(rp,x0+=x1,y0+=y1);
  2046.         move.l    d6,d0
  2047.         asl.l    #2,d0
  2048.         add.l    d6,d0
  2049.         asr.l    #2,d0
  2050.         sub.l    d0,d2
  2051.         move.l    d2,d0
  2052.         move.l    d7,d1
  2053.         asl.l    #2,d1
  2054.         add.l    d7,d1
  2055.         asr.l    #2,d1
  2056.         add.l    d1,d3
  2057.         move.l    d3,d1
  2058.         bsr    AreaDraw        ; AreaDraw(rp,x0-=x2*5/4,y0+=y2*5/4);
  2059. Zeiger23    sub.l    d4,d2
  2060.         move.l    d2,d0
  2061.         sub.l    d5,d3
  2062.         move.l    d3,d1
  2063.         bra    AreaDraw        ; AreaDraw(rp,x0-=x1,y0-=y1);
  2064.  
  2065. ;--------------------------------------------------------------------------
  2066.  
  2067. Zeichnen    movem.l    d2-d7/a2/a6,-(sp)
  2068.         move.l    GfxBase(bp),a6
  2069.         move.l    RPort1(bp),a2
  2070.         move.l    a2,a1            ; RastPort
  2071.         lea    BitMap1(bp),a0        ; BitMap
  2072.         move.l    ReDrawx1(bp),d0
  2073.         move.l    d0,d2
  2074.         sub.l    BoLeft(bp),d0        ; redrawx1-boleft
  2075.         move.l    ReDrawy1(bp),d1
  2076.         move.l    d1,d3
  2077.         sub.l    BoTop(bp),d1        ; redrawy1-botop
  2078.         move.l    ReDrawx2(bp),d4
  2079.         sub.l    d2,d4
  2080.         addq.l    #1,d4            ; redrawx2-redrawx1+1
  2081.         move.l    ReDrawy2(bp),d5
  2082.         sub.l    d3,d5
  2083.         addq.l    #1,d5            ; redrawy2-redrawy1+1
  2084.         moveq    #256-$c0,d6
  2085.         neg.b    d6
  2086.         RECALL    BltBitMapRastPort
  2087.         tst.b    sekunden(bp)
  2088.         beq    1$
  2089.         move.l    Breite(bp),d2
  2090.         asr.l    #1,d2            ; redrawx1/2
  2091.         move.l    Hoehe(bp),d3
  2092.         asr.l    #1,d3            ; redrawy1/2
  2093.         lea    sinus(pc),a0
  2094.         add.w    sec(bp),a0
  2095.         move.b    0(a0),d4
  2096.         ext.w    d4
  2097.         muls    Breit2+2(bp),d4
  2098.         divs    #300,d4
  2099.         ext.l    d4
  2100.         add.l    d2,d4            ; redrawx2=redrawx1+sinus[sec]*Breit2/300;
  2101.         move.b    60(a0),d5
  2102.         ext.w    d5
  2103.         muls    Hoehe2+2(bp),d5
  2104.         divs    #300,d5
  2105.         ext.l    d5
  2106.         neg.l    d5
  2107.         add.l    d3,d5            ; redrawy2=redrawy1+cosinus[sec]*Hoehe2/300;
  2108.         move.l    d2,d0
  2109.         move.l    d3,d1
  2110.         bsr    Move            ; Move(rp,redrawx1,redrawy1);
  2111.         move.l    d4,d0
  2112.         move.l    d5,d1
  2113.         bsr    Draw            ; Draw(rp,redrawx2,redrawy2);
  2114.         move.b    xDouble(bp),d6        ; if (doublex)
  2115.         beq.s    7$
  2116.         moveq    #1,d0
  2117.         add.l    d2,d0
  2118.         move.l    d3,d1
  2119.         bsr    Move            ; Move(rp,redrawx1+1,redrawy1);
  2120.         moveq    #1,d0
  2121.         add.l    d4,d0
  2122.         move.l    d5,d1
  2123.         bsr    Draw            ; Draw(rp,redrawx2+1,redrawy2);
  2124. 7$        move.b    yDouble(bp),d7        ; if (doubley)
  2125.         beq.s    6$
  2126.         move.l    d2,d0
  2127.         moveq    #1,d1
  2128.         add.l    d3,d1
  2129.         bsr    Move            ; Move(rp,redrawx1,redrawy1+1);
  2130.         move.l    d4,d0
  2131.         moveq    #1,d1
  2132.         add.l    d5,d1
  2133.         bsr    Draw            ; Draw(rp,redrawx2,redrawy2+1);
  2134. 6$        cmp.l    d2,d4            ; if (redrawx1 > redrawx2)
  2135.         bcc.s    5$
  2136.         exg.l    d2,d4            ; redrawx1 <-> redrawx2
  2137. 5$        tst.b    d6            ; if (doublex)
  2138.         beq.s    4$
  2139.         addq.l    #1,d4            ; redrawx2++;
  2140. 4$        move.l    d2,ReDrawx1(bp)
  2141.         move.l    d4,ReDrawx2(bp)
  2142.         cmp.l    d3,d5            ; if (redrawy1 > redrawy2)
  2143.         bcc.s    3$
  2144.         exg.l    d3,d5            ; redrawy1 <-> redrawy2
  2145. 3$        tst.b    d7            ; if (doubley)
  2146.         beq.s    2$
  2147.         addq.l    #1,d5            ; redrawy2++
  2148. 2$        move.l    d3,ReDrawy1(bp)
  2149.         move.l    d5,ReDrawy2(bp)
  2150. 1$        moveq    #1,d0            ; all ok (for flags!)
  2151.         movem.l    (sp)+,d2-d7/a2/a6
  2152.         rts
  2153.  
  2154. ***************************************************************************
  2155.  
  2156. SetPattern    movem.l    d2-d7,-(sp)
  2157.         move.w    #$5555,d2
  2158.         move.w    #$aaaa,d3
  2159.         lea    Must(bp),a0
  2160.         move.b    (a0)+,d4        ; a
  2161.         move.b    (a0)+,d5        ; b
  2162.         move.b    (a0)+,d6        ; c
  2163.         move.b    (a0),d7            ; d
  2164.         moveq    #-2,d0            ; if (a!=b || c!=d)
  2165.         cmp.b    d4,d5
  2166.         bne.s    5$
  2167.         cmp.b    d6,d7
  2168.         bne.s    5$
  2169.         moveq    #-1,d0            ; if (a==b && c==d)
  2170. 5$        move.w    d0,xMask+2(bp)
  2171.         moveq    #-2,d0            ; if (a!=c || b!=d)
  2172.         cmp.b    d4,d6
  2173.         bne.s    4$
  2174.         cmp.b    d5,d7
  2175.         bne.s    4$
  2176.         moveq    #-1,d0            ; if (a==c && b==d)
  2177. 4$        move.w    d0,yMask+2(bp)
  2178.         lea    Muster(bp),a0
  2179.         moveq    #0,d1
  2180. 3$        btst    d1,d4            ; (a&1<<i?0x5555:0)
  2181.         sne    d0
  2182.         ext.w    d0
  2183.         and.w    d2,d0
  2184.         btst    d1,d5            ; (b&1<<i?0xaaaa:0)
  2185.         beq.s    2$
  2186.         or.w    d3,d0
  2187. 2$        move.w    d0,(a0)+        ; Muster[i][0]
  2188.         btst    d1,d6            ; (c&1<<i?0x5555:0)
  2189.         sne    d0
  2190.         ext.w    d0
  2191.         and.w    d2,d0
  2192.         btst    d1,d7            ; (d&1<<i?0xaaaa:0)
  2193.         beq.s    1$
  2194.         or.w    d3,d0
  2195. 1$        move.w    d0,(a0)+        ; Muster[i][1]
  2196.         addq.w    #1,d1
  2197.         cmpi.w    #8,d1
  2198.         bcs.s    3$            ; for (i=0;i<8;i++)
  2199.         movem.l    (sp)+,d2-d7
  2200.         rts
  2201.  
  2202. ***************************************************************************
  2203.  
  2204. projectSave    move.l    WbArg(bp),d0
  2205.         beq.s    getname
  2206.  
  2207. cdtoicon    movem.l    d2/a2/a6,-(sp)        ; wb
  2208.         move.l    d0,a2
  2209.         move.l    0(a2),d1
  2210.         CALL    CurrentDir,DosBase(bp)    ; change dir to icon
  2211.         move.l    d0,d2
  2212.         move.l    4(a2),a0
  2213.         bsr.s    savePrefs        ; savePrefs(wa_name);
  2214.         move.l    d2,d1
  2215.         RECALL    CurrentDir        ; set olddir
  2216.         movem.l    (sp)+,d2/a2/a6
  2217.         rts
  2218.  
  2219. getname        movem.l    d2/d3/a6,-(sp)        ; cli
  2220.         moveq    #120,d0
  2221.         moveq    #0,d1
  2222.         CALL    AllocVec,SysBase(bp)
  2223.         move.l    d0,d3
  2224.         beq.s    1$
  2225.         move.l    d3,d1
  2226.         moveq    #120,d2
  2227.         CALL    GetProgramName,DosBase(bp)
  2228.         tst.l    d0
  2229.         beq.s    2$
  2230.         move.l    d3,a0
  2231.         bsr.s    savePrefs        ; savePrefs(argv[0]);
  2232. 2$        move.l    d3,a1
  2233.         CALL    FreeVec,SysBase(bp)
  2234. 1$        movem.l    (sp)+,d2/d3/a6
  2235.         rts
  2236.  
  2237. savePrefs    movem.l    d2-d7/a2/a3/a6,-(sp)
  2238.         move.l    a0,d4            ; save name ptr
  2239.         CALL    GetDiskObjectNew,IconBase(bp)
  2240.         move.l    d0,d7
  2241.         beq    1$
  2242.         moveq    #(((tt_Num*40)+15)&$fff0)>>4,d6
  2243.         lsl.w    #4,d6
  2244.         move.l    d7,a1
  2245.         move.l    54(a1),d1
  2246.         move.l    d1,a1
  2247. 16$        tst.l    (a1)+
  2248.         bne.s    16$
  2249.         sub.l    d1,a1
  2250.         add.l    d6,a1
  2251.         moveq    #tt_Num*4,d0
  2252.         add.l    a1,d0
  2253.         moveq    #0,d1
  2254.         CALL    AllocVec,SysBase(bp)
  2255.         move.l    d0,d5
  2256.         beq    2$            ; no buffer for ptr && tooltypes
  2257.         add.l    d5,d6
  2258.         move.l    d7,a0
  2259.         move.l    54(a0),a0
  2260.         move.l    d6,a1
  2261. 15$        move.l    (a0)+,(a1)+        ; copy ptrs to tooltypes
  2262.         bne.s    15$
  2263.         move.l    IconBase(bp),a6
  2264.         moveq    #0,d2
  2265. 14$        move.l    d2,d0
  2266.         bsr    GetToolType
  2267.         move.l    a0,a3
  2268.         move.l    d6,a0
  2269.         move.l    a3,a1
  2270.         RECALL    FindToolType
  2271.         tst.l    d0
  2272.         beq.s    11$
  2273.         move.l    d6,a2
  2274. 13$        addq.w    #4,a2
  2275.         tst.l    0(a2)
  2276.         beq.s    12$
  2277.         move.l    a2,a0
  2278.         move.l    a3,a1
  2279.         RECALL    FindToolType
  2280.         tst.l    d0
  2281.         bne.s    13$
  2282. 12$        move.l    (a2)+,-8(a2)        ; remove ptr to tooltype
  2283.         bne.s    12$
  2284. 11$        addq.w    #1,d2
  2285.         cmpi.w    #tt_Num,d2
  2286.         bcs.s    14$
  2287.         lea    fmt1(pc),a0
  2288.         move.l    a0,d2            ; format string
  2289.         move.l    d6,a2
  2290. 10$        tst.l    (a2)+
  2291.         bne.s    10$
  2292.         subq.w    #4,a2            ; ttypes[k]
  2293.         move.l    d5,a3            ; buffer for sprintf
  2294.         moveq    #0,d0            ; TOP
  2295.         move.l    WinPtr(bp),a1
  2296.         moveq    #0,d1
  2297.         move.w    6(a1),d1        ; window->TopEdge
  2298.         bsr    SetToolType
  2299.         moveq    #1,d0            ; LEFT
  2300.         move.l    WinPtr(bp),a1
  2301.         moveq    #0,d1
  2302.         move.w    4(a1),d1        ; window->LeftEdge
  2303.         bsr    SetToolType
  2304.         moveq    #2,d0            ; WIDTH
  2305.         move.l    Breite(bp),d1
  2306.         bsr    SetToolType
  2307.         moveq    #3,d0            ; HEIGHT
  2308.         move.l    Hoehe(bp),d1
  2309.         bsr    SetToolType
  2310.         moveq    #4,d0            ; SHOWFACE
  2311.         moveq    #0,d1
  2312.         move.b    zeigen(bp),d1
  2313.         bsr    SetToolType
  2314.         moveq    #5,d0            ; HANDTYPE
  2315.         moveq    #0,d1
  2316.         move.b    zeigertyp(bp),d1
  2317.         bsr    SetToolType
  2318.         moveq    #6,d0            ; HANDWIDTH
  2319.         moveq    #0,d1
  2320.         move.b    zeigerbreite(bp),d1
  2321.         bsr    SetToolType
  2322.         moveq    #4,d1            ; BORDERTYPE
  2323.         tst.b    hires(bp)
  2324.         sne    d0
  2325.         and.b    d1,d0
  2326.         tst.b    interlace(bp)
  2327.         sne    d1
  2328.         andi.b    #8,d1
  2329.         add.b    d0,d1
  2330.         add.b    rahmenanz(bp),d1
  2331.         moveq    #7,d0
  2332.         bsr    SetToolType
  2333.         moveq    #4,d1            ; CHIME
  2334.         tst.b    smarthour(bp)
  2335.         sne    d0
  2336.         and.b    d0,d1
  2337.         add.b    chime(bp),d1
  2338.         moveq    #8,d0
  2339.         bsr.s    SetToolType
  2340.         lea    fmt2(pc),a0        ; new format string
  2341.         move.l    a0,d2
  2342.         tst.b    sekunden(bp)
  2343.         beq.s    9$
  2344.         moveq    #9,d0            ; SECONDS
  2345.         bsr    SetToolType
  2346. 9$        tst.b    oval(bp)
  2347.         beq.s    8$
  2348.         moveq    #10,d0            ; OVAL
  2349.         bsr    SetToolType
  2350. 8$        tst.b    schatten(bp)
  2351.         beq.s    7$
  2352.         moveq    #11,d0            ; SHADOW
  2353.         bsr    SetToolType
  2354. 7$        tst.b    closegad(bp)
  2355.         beq.s    6$
  2356.         moveq    #12,d0            ; CLOSEGAD
  2357.         bsr    SetToolType
  2358. 6$        lea    fmt3(pc),a0
  2359.         move.l    a0,d2
  2360.         moveq    #13,d0            ; DRAWPENS
  2361.         bsr    SetToolType
  2362.         lea    Pens(bp),a0
  2363.         moveq    #14-1,d0
  2364.         bsr    SetStr
  2365.         moveq    #14,d0            ; PATTERN
  2366.         bsr    SetToolType
  2367.         lea    Must(bp),a0
  2368.         moveq    #4-1,d0
  2369.         bsr    SetStr
  2370.         clr.l    (a2)            ; end list
  2371.         move.l    d4,a0
  2372.         move.l    d7,a1
  2373.         move.l    54(a1),d2        ; ttypes1=dobj->ToolTypes;
  2374.         move.l    d6,54(a1)        ; dobj->ToolTypes=ttypes2;
  2375.         RECALL    PutDiskObject
  2376.         move.l    d7,a1
  2377.         move.l    d2,54(a1)        ; dobj->ToolTypes=ttypes1;
  2378. 3$        move.l    d5,a1
  2379.         CALL    FreeVec,SysBase(bp)
  2380. 2$        move.l    d7,a0
  2381.         CALL    FreeDiskObject,IconBase(bp)
  2382. 1$        movem.l    (sp)+,d2-d7/a2/a3/a6
  2383.         rts
  2384.  
  2385. SetToolType    move.l    a3,(a2)+        ; store ptr
  2386.         bsr.s    GetToolType
  2387.         move.l    a0,d0
  2388.         movem.l    d0/d1/a2/a6,-(sp)    ; stuff args && save regs
  2389.         move.l    d2,a0
  2390.         move.l    sp,a1
  2391.         lea    sc_put(pc),a2
  2392.         CALL    RawDoFmt,SysBase(bp)    ; sprintf()
  2393.         movem.l    (sp)+,d0/d1/a2/a6
  2394. 1$        tst.b    (a3)+            ; get begin of next buffer
  2395.         bne.s    1$
  2396.         rts
  2397.  
  2398. sc_put        move.b    d0,(a3)+        ; stuffchar()
  2399.         rts
  2400.  
  2401. GetToolType    lea    tt_Tab(pc),a0        ; get ptr to tooltype
  2402.         add.w    d0,d0
  2403.         adda.w    0(a0,d0.w),a0
  2404.         rts
  2405.  
  2406. SetStr        move.l    -4(a2),a3        ; make a string
  2407. 2$        tst.b    (a3)+
  2408.         bne.s    2$
  2409.         subq.w    #1,a3
  2410. 1$        move.b    (a0),d1
  2411.         lsr.b    #4,d1
  2412.         bsr.s    dtox            ; convert to decimal
  2413.         move.b    d1,(a3)+
  2414.         moveq    #$f,d1
  2415.         and.b    (a0)+,d1
  2416.         bsr.s    dtox            ; convert to decimal
  2417.         move.b    d1,(a3)+
  2418.         dbra    d0,1$
  2419.         clr.b    (a3)+            ; end string
  2420.         rts
  2421.  
  2422. dtox        addi.b    #'0',d1            ; make ascii
  2423.         cmpi.b    #'9'+1,d1
  2424.         bcs.s    1$
  2425.         addq.b    #7,d1
  2426. 1$        rts
  2427.  
  2428. ***************************************************************************
  2429.  
  2430. TestAlarm    move.l    d3,-(sp)        ; check for beep
  2431.         move.l    d2,-(sp)
  2432.         moveq    #0,d3
  2433.         move.w    std(bp),d3
  2434.         move.w    min(bp),d2
  2435. ; st2 = std/5;
  2436.         divu    #5,d3
  2437. ; if (!st2)
  2438.         tst.w    d3
  2439.         bne.s    7$
  2440. ;    st2=12;
  2441.         moveq    #12,d3
  2442. ; if (alarm && almin==min && alstd==st2)
  2443. 7$        tst.b    alarm(bp)
  2444.         beq.s    6$
  2445.         lea    alarmtune(pc),a0
  2446.         cmp.w    almin(bp),d2
  2447.         bne.s    6$
  2448.         cmp.w    alstd(bp),d3
  2449.         beq.s    2$
  2450. ; if (chime && !min)
  2451. 6$        move.b    chime(bp),d1
  2452.         beq.s    1$
  2453.         tst.w    d2
  2454.         bne.s    5$
  2455. ; calc -> &hourtune[smarthour?24-st2*2:22]
  2456.         lea    hourtune(pc),a0
  2457.         moveq    #22*2,d0
  2458.         tst.b    smarthour(bp)
  2459.         beq.s    3$
  2460.         moveq    #24*2,d0
  2461.         add.w    d3,d3
  2462.         add.w    d3,d3
  2463.         sub.w    d3,d0
  2464.         bra.s    3$
  2465. ; if (chime==2 && (min==15 || min==30 || min==45))
  2466. 5$        subq.b    #2,d1
  2467.         bne.s    1$
  2468.         lea    quartertune(pc),a0
  2469.         moveq    #6*2,d0            ; max value
  2470. 4$        subq.w    #2*2,d0
  2471.         addi.w    #-15,d2
  2472.         bcc.s    1$            ; diffrent from 15,30,45
  2473.         bne.s    4$
  2474. ; startune(tune);
  2475. 3$        lea    0(a0,d0.w),a0
  2476. 2$        move.l    a0,PlayTune(bp)        ; store tune address
  2477.         bsr.s    StartTune
  2478. 1$        move.l    (sp)+,d2
  2479.         move.l    (sp)+,d3
  2480.         rts
  2481.  
  2482. ;--------------------------------------------------------------------------
  2483.  
  2484. StartTune    move.l    a6,-(sp)
  2485.         move.l    a2,-(sp)
  2486.         tst.b    SoundOn(bp)
  2487.         bne.s    1$
  2488.         move.l    AudioIO+0(bp),a2
  2489.         move.b    #90,9(a2)        ; ln_Pri = 90;
  2490.         move.w    #32,28(a2)        ; io_Command = ADCMD_ALLOCATE;
  2491.         move.b    #1<<6,30(a2)        ; io_Flags = ADIOF_NOWAIT;
  2492.         lea    cmap(pc),a0
  2493.         move.l    a0,34(a2)        ; ioa_Data = ChannelMap;
  2494.         moveq    #4,d0
  2495.         move.l    d0,38(a2)        ; ioa_Length = 4;
  2496.         move.l    a2,a1
  2497.         CALL    BeginIO,20(a1)
  2498.         move.l    a2,a1
  2499.         CALL    WaitIO,SysBase(bp)
  2500.         tst.l    d0
  2501.         bne.s    1$            ; error !
  2502.         st    SoundOn(bp)
  2503.         moveq    #2,d0
  2504.         and.b    $bfe001,d0
  2505.         bne.s    2$            ; filter is off !
  2506.         ori.b    #2,$bfe001
  2507.         st    filter(bp)
  2508. 2$        move.l    a2,a0
  2509.         move.l    AudioIO+4(bp),a1
  2510.         moveq    #68,d0
  2511.         RECALL    CopyMemQuick        ; fill second request
  2512.         bsr.s    PlayNote
  2513.         bsr.s    PlayNote
  2514. 1$        move.l    (sp)+,a2
  2515.         move.l    (sp)+,a6
  2516.         rts
  2517.  
  2518. ;--------------------------------------------------------------------------
  2519.  
  2520. PlayNote    move.l    a6,-(sp)
  2521.         moveq    #0,d0
  2522.         moveq    #0,d1
  2523.         move.b    reqnr(bp),d1        ; old reqnr
  2524.         seq    d0
  2525.         neg.b    d0
  2526.         move.b    d0,reqnr(bp)        ; new reqnr
  2527.         lea    AudioSent(bp),a1
  2528.         clr.b    0(a1,d1.w)        ; audsent[reqnr]=0;
  2529.         move.l    PlayTune(bp),a0
  2530.         tst.w    0(a0)
  2531.         bne.s    2$            ; tune not ready
  2532.         tst.b    0(a1,d0.w)
  2533.         bne.s    3$            ; not last
  2534.         move.l    SysBase(bp),a6
  2535.         bsr.s    EndTune            ; free channels
  2536. 3$        bra.s    1$
  2537. 2$        st    0(a1,d1.w)        ; audsent[reqnr]=1;
  2538.         add.w    d1,d1
  2539.         add.w    d1,d1
  2540.         lea    AudioIO+0(bp),a1
  2541.         move.l    0(a1,d1.w),a1
  2542.         move.w    #3,28(a1)        ; io_Command = CMD_WRITE;
  2543.         move.b    #1<<4,30(a1)        ; io_Flags = ADIOF_PERVOL;
  2544.         add.l    WaveForm(bp),d1
  2545.         move.l    d1,34(a1)        ; ioa_Data = &waveform[reqnr*4];
  2546.         moveq    #4,d0
  2547.         move.l    d0,38(a1)        ; ioa_Length = 4;
  2548.         move.w    #500,42(a1)        ; ioa_Period = 500;
  2549.         move.w    #64,44(a1)        ; ioa_Volume = 64;
  2550.         move.w    0(a0),46(a1)        ; ioa_Cycles = *playtune++;
  2551.         addq.l    #2,PlayTune(bp)
  2552.         CALL    BeginIO,20(a1)
  2553. 1$        move.l    (sp)+,a6
  2554.         rts
  2555.  
  2556. ;--------------------------------------------------------------------------
  2557.  
  2558. EndTune        clr.b    SoundOn(bp)
  2559.         tst.b    filter(bp)        ; trigger filter ?
  2560.         beq.s    1$
  2561.         and.b    #$fd,$bfe001        ; filter on
  2562.         clr.b    filter(bp)
  2563. 1$        move.l    AudioIO+0(bp),a1
  2564.         move.w    #9,28(a1)        ; ioa_Command = ADCMD_FREE
  2565.         jmp    _LVODoIO(a6)
  2566.  
  2567. ***************************************************************************
  2568.  
  2569. ; a0 - window table
  2570. ; a1 - gadget tags
  2571.  
  2572. CreateRequest    movem.l    d2-d4/a2/a3/a6,-(sp)
  2573.         move.l    a0,a3
  2574.         move.l    a1,d2
  2575.         lea    NewWinBuf+18(bp),a0    ; *glistpointer (temp)
  2576.         clr.l    (a0)
  2577.         CALL    CreateContext,GadsBase(bp)
  2578.         move.l    d0,d4
  2579.         beq    1$
  2580.         lea    NewWinBuf(bp),a2
  2581.         move.l    #100<<16+100,0(a2)    ; left && top
  2582.         clr.l    4(a2)            ; width && height
  2583.         moveq    #0,d0
  2584.         move.w    (a3)+,d0        ; flags as a word
  2585.         move.l    d0,10(a2)        ; idcmp
  2586.         move.l    #$1100e,14(a2)        ; flags
  2587.         moveq    #0,d0
  2588.         move.b    (a3)+,d0        ; string number
  2589.         bsr    GetLocStr
  2590.         move.l    d0,26(a2)        ; window title
  2591.         clr.w    NewGad+16(bp)        ; clear gadget id
  2592.         move.b    (a3)+,d3        ; gadget counter
  2593. 4$        lea    NewGad(bp),a2        ; structure to fill
  2594.         move.l    WinPtr(bp),a0
  2595.         move.l    46(a0),a0        ; screen
  2596.         moveq    #0,d0            ; LeftEdge
  2597.         move.b    (a3)+,d0
  2598.         add.b    36(a0),d0        ; screen->WBorLeft;
  2599.         move.w    d0,0(a2)
  2600.         moveq    #1,d0            ; TopEdge
  2601.         add.b    (a3)+,d0
  2602.         add.b    35(a0),d0        ; screen->WBorTop
  2603.         add.w    142(a0),d0        ; screen->RastPort.TxHeight
  2604.         move.w    d0,2(a2)
  2605.         move.b    (a3)+,5(a2)        ; Width
  2606.         move.b    (a3)+,7(a2)        ; Height
  2607.         moveq    #0,d0
  2608.         move.b    (a3)+,d0
  2609.         beq.s    3$            ; no text
  2610.         bsr    GetLocStr
  2611. 3$        lea    TextAttr(bp),a0
  2612.         movem.l    d0/a0,8(a2)        ; text && font to use
  2613.         addq.w    #1,16(a2)        ; increment GadgetID
  2614.         move.l    VisualInfo(bp),22(a2)
  2615.         moveq    #0,d0
  2616.         move.b    (a3)+,d0
  2617.         move.l    d4,a0
  2618.         lea    NewGad(bp),a1
  2619.         move.l    d2,a2
  2620.         move.l    0(a2),a2
  2621.         RECALL    CreateGadgetA
  2622.         move.l    d0,d4
  2623.         beq.s    2$            ; error !
  2624.         addq.l    #4,d2
  2625.         subq.b    #1,d3
  2626.         bne.s    4$            ; not ready
  2627.         lea    NewWinBuf(bp),a0
  2628.         lea    windowtags(pc),a1
  2629.         CALL    OpenWindowTagList,IntBase(bp)
  2630.         move.l    d0,d2
  2631.         beq.s    2$            ; no window ...
  2632.         move.l    d2,a0
  2633.         move.w    #-1,a1
  2634.         lea    ProgName(pc),a2
  2635.         RECALL    SetWindowTitles        ; according screentitle
  2636.         move.l    d2,a0
  2637.         suba.l    a1,a1
  2638.         CALL    GT_RefreshWindow,GadsBase(bp)
  2639.         move.l    d2,d0
  2640.         move.l    NewWinBuf+18(bp),d1    ; return glist
  2641.         bra.s    1$
  2642. 2$        move.l    NewWinBuf+18(bp),a0    ; glistpointer
  2643.         CALL    FreeGadgets,GadsBase(bp)
  2644.         moveq    #0,d0
  2645. 1$        movem.l    (sp)+,d2-d4/a2/a3/a6
  2646.         rts
  2647.  
  2648. ***************************************************************************
  2649.  
  2650. GetLocStr    move.l    a6,-(sp)        ; get localized string
  2651.         lea    LocaleTab(pc),a1
  2652.         add.w    d0,d0
  2653.         add.w    0(a1,d0.w),a1        ; default !
  2654.         lsr.w    #1,d0
  2655.         move.l    Catalog(bp),d1
  2656.         beq.s    1$            ; no catalog !
  2657.         move.l    d1,a0
  2658.         CALL    GetCatalogStr,LocBase(bp)
  2659.         move.l    d0,a1
  2660. 1$        move.l    a1,d0
  2661.         move.l    (sp)+,a6
  2662.         rts
  2663.  
  2664. ***************************************************************************
  2665.  
  2666. ; 32-bit division (only positive values!)
  2667.  
  2668. LDiv        move.l    d3,-(sp)
  2669.         move.l    d2,-(sp)
  2670.         move.w    d1,d3
  2671.         move.w    d0,d2
  2672.         clr.w    d0
  2673.         swap    d0
  2674.         divu.w    d3,d0
  2675.         move.l    d0,d1
  2676.         swap    d0
  2677.         move.w    d2,d1
  2678.         divu.w    d3,d1
  2679.         move.w    d1,d0
  2680.         clr.w    d1
  2681.         swap    d1
  2682.         move.l    (sp)+,d2
  2683.         move.l    (sp)+,d3
  2684.         rts
  2685.  
  2686. ***************************************************************************
  2687.  
  2688. ; static data
  2689.  
  2690. GadgetList    dc.b    $03,$80            ; GTYP_CLOSE
  2691.         dc.b    $13,$40            ; GTYP_DEPTH
  2692.         dc.b    $1b,$10            ; GTYP_SIZING
  2693.         dc.b    $63,$20            ; GTYP_WDRAGGING
  2694.  
  2695. sizes        dc.b    0,0,3,2,-3,0,3,2,-3,-2,3,2,0,2,0,-4
  2696.  
  2697. colwintab    WINIT    $240,Choose,1        ; window && gadget defintion
  2698.         GITEM    4,2,144,68,0,8
  2699.  
  2700. almwintab    WINIT    $270,Alarm,4        ; window && gadget definition
  2701.         GITEM    42,15,20,39,0,11
  2702.         GITEM    82,15,20,39,0,11
  2703.         GITEM    2,58,70,12,Use,1
  2704.         GITEM    76,58,70,12,Cancel,1
  2705.  
  2706.         cnop    0,4
  2707.  
  2708. almgadtags1    dc.l    $80080026,1        ; GSTL_Min,1
  2709.         dc.l    $80080027,12        ; GSTL_Max,12
  2710.         dc.l    $80080029,10        ; GSTL_MaxLevelLen,10
  2711.         dc.l    $8008002B,4        ; GSTL_PlaceText,PLACETEXT_ABOVE
  2712.         dc.l    $80031001,2        ; PGA_FREEDOM,LORIENT_VERT
  2713.         dc.l    $80030016,1        ; GA_Relverify,TRUE
  2714.         dc.l    0
  2715.  
  2716. almgadtags2    dc.l    $80080026,0        ; GSTL_Min,0
  2717.         dc.l    $80080027,59        ; GSTL_Max,59
  2718.         dc.l    $80080029,5        ; GSTL_MaxLevelLen,5
  2719.         dc.l    $8008002B,4        ; GSTL_PlaceText,PLACETEXT_ABOVE
  2720.         dc.l    $80031001,2        ; PGA_FREEDOM,LORIENT_VERT
  2721.         dc.l    $80030016,1        ; GA_Relverify,TRUE
  2722.         dc.l    0
  2723.  
  2724. windowtags    dc.l    $80000076,148        ; WA_InnerWidth,width
  2725.         dc.l    $80000077,72        ; WA_InnerHeight,height
  2726. maintags    dc.l    $80000090,1        ; WA_AutoAdjust,TRUE
  2727.         dc.l    0
  2728.  
  2729. MenuTag        dc.l    $80080043,1        ; GTMN_NewLookMenus,TRUE
  2730.         dc.l    0
  2731.  
  2732. MenuList    MITEM    1,Project,0,0,0        ; menu structure (compact)
  2733.          MITEM     2,About,0,0
  2734.          MITEM     2,SavePrefs,0,0
  2735.          MITEM     2,Quit,0,0
  2736.         MITEM    1,Settings,0,0
  2737.          MITEM     2,Seconds,9,0
  2738.          MITEM     2,Oval,9,0
  2739.          MITEM     2,Show,0,0
  2740.           MITEM      3,Minutes,1,2|4|8|16
  2741.           MITEM      3,Hours,1,1|4|8|16
  2742.           MITEM      3,Quarter,1,1|2|8|16
  2743.           MITEM      3,One,1,1|2|4|16
  2744.           MITEM      3,None,1,1|2|4|8
  2745.          MITEM     2,Hands,0,0
  2746.           MITEM      3,Line,1,2|4|8
  2747.           MITEM      3,Triangle,1,1|4|8
  2748.           MITEM      3,Rhombus,1,1|2|8
  2749.           MITEM      3,Rectangle,1,1|2|4
  2750.           MITEM      3,-1,0,0
  2751.           MITEM      3,VeryThin,1,128+(2|4|8|16)
  2752.           MITEM      3,Thin,1,128+(1|4|8|16)
  2753.           MITEM      3,Normal,1,128+(1|2|8|16)
  2754.           MITEM      3,Thick,1,128+(1|2|4|16)
  2755.           MITEM      3,VeryThick,1,128+(1|2|4|8)
  2756.          MITEM     2,Shadow,9,0
  2757.          MITEM     2,Border,0,0
  2758.           MITEM      3,None,1,2|4
  2759.           MITEM      3,Single,1,1|4
  2760.           MITEM      3,Double,1,1|2
  2761.           MITEM      3,-1,0,0
  2762.           MITEM      3,Hires,9,0
  2763.           MITEM      3,Interlace,9,0
  2764.          MITEM     2,Chime,0,0
  2765.           MITEM      3,None,1,2|4
  2766.           MITEM      3,Hours,1,1|4
  2767.           MITEM      3,Quarter,1,1|2
  2768.           MITEM      3,-1,0,0
  2769.           MITEM      3,Smart,9,0
  2770.          MITEM     2,Alarm,0,0
  2771.           MITEM      3,Set,0,0
  2772.           MITEM      3,On,9,0
  2773.          MITEM     2,CloseGad,9,0
  2774.         MITEM    1,Colors,0,0
  2775.          MITEM     2,Seconds,0,0
  2776.          MITEM     2,MinAPen,0,0
  2777.          MITEM     2,MinOPen,0,0
  2778.          MITEM     2,HourAPen,0,0
  2779.          MITEM     2,HourOPen,0,0
  2780.          MITEM     2,Shadow,0,0
  2781.          MITEM     2,Str12,0,0
  2782.          MITEM     2,Quarter,0,0
  2783.          MITEM     2,Hours,0,0
  2784.          MITEM     2,Minutes,0,0
  2785.          MITEM     2,Border0,0,0
  2786.          MITEM     2,Border1,0,0
  2787.          MITEM     2,Border2,0,0
  2788.          MITEM     2,Border3,0,0
  2789.         MITEM    1,Pattern,0,0
  2790.          MITEM     2,Color0,0,0
  2791.          MITEM     2,Color1,0,0
  2792.          MITEM     2,Color2,0,0
  2793.          MITEM     2,Color3,0,0
  2794.  
  2795. LocaleTab    ADDLOC    Project,0        ; all strings
  2796.         ADDLOC    About
  2797.         ADDLOC    AboutKey
  2798.         ADDLOC    SavePrefs
  2799.         ADDLOC    SaveKey
  2800.         ADDLOC    Quit
  2801.         ADDLOC    QuitKey
  2802.         ADDLOC    Settings
  2803.         ADDLOC    Seconds
  2804.         ADDLOC    Oval
  2805.         ADDLOC    Show
  2806.         ADDLOC    Minutes
  2807.         ADDLOC    Hours
  2808.         ADDLOC    Quarter
  2809.         ADDLOC    One
  2810.         ADDLOC    None
  2811.         ADDLOC    Hands
  2812.         ADDLOC    Line
  2813.         ADDLOC    Triangle
  2814.         ADDLOC    Rhombus
  2815.         ADDLOC    Rectangle
  2816.         ADDLOC    VeryThin
  2817.         ADDLOC    Thin
  2818.         ADDLOC    Normal
  2819.         ADDLOC    Thick
  2820.         ADDLOC    VeryThick
  2821.         ADDLOC    Shadow
  2822.         ADDLOC    Border
  2823.         ADDLOC    Single
  2824.         ADDLOC    Double
  2825.         ADDLOC    Hires
  2826.         ADDLOC    Interlace
  2827.         ADDLOC    Chime
  2828.         ADDLOC    Smart
  2829.         ADDLOC    Alarm
  2830.         ADDLOC    Set
  2831.         ADDLOC    On
  2832.         ADDLOC    CloseGad
  2833.         ADDLOC    Colors
  2834.         ADDLOC    MinAPen
  2835.         ADDLOC    MinOPen
  2836.         ADDLOC    HourAPen
  2837.         ADDLOC    HourOPen
  2838.         ADDLOC    Str12
  2839.         ADDLOC    Border0
  2840.         ADDLOC    Border1
  2841.         ADDLOC    Border2
  2842.         ADDLOC    Border3
  2843.         ADDLOC    Pattern
  2844.         ADDLOC    Color0
  2845.         ADDLOC    Color1
  2846.         ADDLOC    Color2
  2847.         ADDLOC    Color3
  2848.         ADDLOC    Description
  2849.         ADDLOC    Choose
  2850.         ADDLOC    Use
  2851.         ADDLOC    Cancel
  2852.  
  2853. LOCALE_START                    ; locale area begin
  2854.  
  2855. ; CATALOG TolleUhr
  2856. ; VERSION 1.2
  2857. ; CATDATE 07.03.94
  2858.  
  2859. m_Project    dc.b    'Project',0
  2860. ; D            'Projekt',0
  2861. m_About        dc.b    'About',0
  2862. ; D            'Über',0
  2863. m_AboutKey    dc.b    '?',0
  2864. ; D            '?',0
  2865. m_SavePrefs    dc.b    'Save Prefs',0
  2866. ; D            'Speichern',0
  2867. m_SaveKey    dc.b    'S',0
  2868. ; D            'S',0
  2869. m_Quit        dc.b    'Quit',0
  2870. ; D            'Ende',0
  2871. m_QuitKey    dc.b    'Q',0
  2872. ; D            'E',0
  2873. m_Settings    dc.b    'Settings',0
  2874. ; D            'Einstellungen',0
  2875. m_Seconds    dc.b    'Seconds',0
  2876. ; D            'Sekunden',0
  2877. m_Oval        dc.b    'Oval',0
  2878. ; D            'Oval',0
  2879. m_Show        dc.b    'Show',0
  2880. ; D            'Zeigen',0
  2881. m_Minutes    dc.b    'Minutes',0
  2882. ; D            'Minuten',0
  2883. m_Hours        dc.b    'Hours',0
  2884. ; D            'Stunden',0
  2885. m_Quarter    dc.b    'Quarter',0
  2886. ; D            'Viertel',0
  2887. m_One        dc.b    'One',0
  2888. ; D            'Eins',0
  2889. m_None        dc.b    'None',0
  2890. ; D            'Nichts',0
  2891. m_Hands        dc.b    'Hands',0
  2892. ; D            'Zeiger',0
  2893. m_Line        dc.b    'Line',0
  2894. ; D            'Linie',0
  2895. m_Triangle    dc.b    'Triangle',0
  2896. ; D            'Dreieck',0
  2897. m_Rhombus    dc.b    'Rhombus',0
  2898. ; D            'Raute',0
  2899. m_Rectangle    dc.b    'Rectangle',0
  2900. ; D            'Rechteck',0
  2901. m_VeryThin    dc.b    'Very Thin',0
  2902. ; D            'Sehr Dünn',0
  2903. m_Thin        dc.b    'Thin',0
  2904. ; D            'Dünn',0
  2905. m_Normal    dc.b    'Normal',0
  2906. ; D            'Normal',0
  2907. m_Thick        dc.b    'Thick',0
  2908. ; D            'Dick',0
  2909. m_VeryThick    dc.b    'Very Thick',0
  2910. ; D            'Sehr Dick',0
  2911. m_Shadow    dc.b    'Shadow',0
  2912. ; D            'Schatten',0
  2913. m_Border    dc.b    'Border',0
  2914. ; D            'Rand',0
  2915. m_Single    dc.b    'Single',0
  2916. ; D            'Einfach',0
  2917. m_Double    dc.b    'Double',0
  2918. ; D            'Doppelt',0
  2919. m_Hires        dc.b    'HiRes',0
  2920. ; D            'HiRes',0
  2921. m_Interlace    dc.b    'Interlace',0
  2922. ; D            'Interlace',0
  2923. m_Chime        dc.b    'Chime',0
  2924. ; D            'Glocke',0
  2925. m_Smart        dc.b    'Smart',0
  2926. ; D            'Elegant',0
  2927. m_Alarm        dc.b    'Alarm',0
  2928. ; D            'Alarm',0
  2929. m_Set        dc.b    'Set',0
  2930. ; D            'Stellen',0
  2931. m_On        dc.b    'On',0
  2932. ; D            'An',0
  2933. m_CloseGad    dc.b    'Close Gadget',0
  2934. ; D            'Close Gadget',0
  2935. m_Colors    dc.b    'Colors',0
  2936. ; D            'Farben',0
  2937. m_MinAPen    dc.b    'Min. APen',0
  2938. ; D            'Min. APen',0
  2939. m_MinOPen    dc.b    'Min. Open',0
  2940. ; D            'Min. OPen',0
  2941. m_HourAPen    dc.b    'Hour Apen',0
  2942. ; D            'Std. APen',0
  2943. m_HourOPen    dc.b    'Hour Open',0
  2944. ; D            'Std. OPen',0
  2945. m_Str12        dc.b    '12',0
  2946. ; D            '12',0
  2947. m_Border0    dc.b    'Border 0',0
  2948. ; D            'Rand 0',0
  2949. m_Border1    dc.b    'Border 1',0
  2950. ; D            'Rand 1',0
  2951. m_Border2    dc.b    'Border 2',0
  2952. ; D            'Rand 2',0
  2953. m_Border3    dc.b    'Border 3',0
  2954. ; D            'Rand 3',0
  2955. m_Pattern    dc.b    'Pattern',0
  2956. ; D            'Muster',0
  2957. m_Color0    dc.b    'Color 0',0
  2958. ; D            'Farbe 0',0
  2959. m_Color1    dc.b    'Color 1',0
  2960. ; D            'Farbe 1',0
  2961. m_Color2    dc.b    'Color 2',0
  2962. ; D            'Farbe 2',0
  2963. m_Color3    dc.b    'Color 3',0
  2964. ; D            'Farbe 3',0
  2965. m_Description    dc.b    'a really nice clock !',0
  2966. ; D            'Eine wirklich tolle Uhr !',0
  2967. m_Choose    dc.b    'Choose one:',0
  2968. ; D            'Wähle eine:',0
  2969. m_Use        dc.b    'Use',0
  2970. ; D            'Benutzen',0
  2971. m_Cancel    dc.b    'Cancel',0
  2972. ; D            'Abbruch',0
  2973.  
  2974. LOCALE_END                    ; locale area end
  2975.  
  2976. DosName        dc.b    'dos.library',0
  2977. IconName    dc.b    'icon.library',0
  2978. IntName        dc.b    'intuition.library',0
  2979. GfxName        dc.b    'graphics.library',0
  2980. GadsName    dc.b    'gadtools.library',0
  2981. LocName        dc.b    'locale.library',0
  2982. LocCat        dc.b    'tolleuhr.catalog',0
  2983. TimerName    dc.b    'timer.device',0
  2984. AudioName    dc.b    'audio.device',0
  2985. TopazName    dc.b    'topaz.font',0
  2986.  
  2987. template    dc.b    '/M,TOP/N,LEFT/N,WIDTH/N,HEIGHT/N,SECONDS/S,PATTERN/K,'
  2988.         dc.b    'OVAL/S,SHADOW/S,SHOWFACE/N,HANDTYPE/N,HANDWIDTH/N,'
  2989.         dc.b    'DRAWPENS/K,BORDERTYPE/N,CHIME/N,CLOSEGAD/S,'
  2990.         dc.b    'PUBSCREEN/K,TASKPRI/N',0
  2991.  
  2992. linefeed    dc.b    10,0
  2993.  
  2994.         dc.b    '$VER:'
  2995. ProgName    dc.b    'TolleUhr 1.21 (7.12.94) © 1993/94 by M.Fleischer and G.Nikl',0
  2996.  
  2997. fmt1        dc.b    '%s=%ld',0        ; format templates for tooltypes
  2998. fmt2        dc.b    '%s',0
  2999. fmt3        dc.b    '%s=0x',0
  3000. fmt4        dc.b    '%2ld',0
  3001. fmt5        dc.b    '%02ld',0
  3002.  
  3003.         cnop    0,2
  3004.  
  3005. ; !!!! do NOT change table order !!!!!
  3006.  
  3007. tt_Tab        ADDCMD    tt_,top,0
  3008.         ADDCMD    tt_,left
  3009.         ADDCMD    tt_,width
  3010.         ADDCMD    tt_,height
  3011.         ADDCMD    tt_,showface
  3012.         ADDCMD    tt_,handtype
  3013.         ADDCMD    tt_,handwidth
  3014.         ADDCMD    tt_,bordertype
  3015.         ADDCMD    tt_,chime
  3016.         ADDCMD    tt_,seconds
  3017.         ADDCMD    tt_,oval
  3018.         ADDCMD    tt_,shadow
  3019.         ADDCMD    tt_,closegad
  3020.         ADDCMD    tt_,drawpens
  3021.         ADDCMD    tt_,pattern
  3022.  
  3023. tt_top        dc.b    'TOP',0
  3024. tt_left        dc.b    'LEFT',0
  3025. tt_width    dc.b    'WIDTH',0
  3026. tt_height    dc.b    'HEIGHT',0
  3027. tt_showface    dc.b    'SHOWFACE',0
  3028. tt_handtype    dc.b    'HANDTYPE',0
  3029. tt_handwidth    dc.b    'HANDWIDTH',0
  3030. tt_bordertype    dc.b    'BORDERTYPE',0
  3031. tt_chime    dc.b    'CHIME',0
  3032. tt_seconds    dc.b    'SECONDS',0
  3033. tt_oval        dc.b    'OVAL',0
  3034. tt_shadow    dc.b    'SHADOW',0
  3035. tt_closegad    dc.b    'CLOSEGAD',0
  3036. tt_drawpens    dc.b    'DRAWPENS',0
  3037. tt_pattern    dc.b    'PATTERN',0
  3038.  
  3039.         cnop    0,2
  3040.  
  3041. handwidth    dc.w    4000,3250,2500,1750,1000
  3042.  
  3043. ; sound data
  3044.  
  3045. alarmtune    dc.w    800,800,800,800,800,800,800,1600
  3046.         dc.w    800,800,800,800,800,800,800,1600
  3047.         dc.w    800,800,800,800,800,800,800,1600
  3048.         dc.w    800,800,800,800,800,800,800,1600
  3049.         dc.w    800,800,800,800,800,800,800,4,0
  3050.  
  3051. hourtune    dc.w    800,1600,800,1600,800,1600,800,1600
  3052.         dc.w    800,1600,800,1600,800,1600,800,1600
  3053.         dc.w    800,1600,800,1600,800,1600,800,4,0
  3054.  
  3055. quartertune    dc.w    400,400,400,400,400,4,0
  3056.  
  3057. ; sound channel allocation map
  3058.  
  3059. cmap        dc.b    1,2,4,8
  3060.  
  3061. ; Farbnummern (defaults)
  3062.  
  3063. pens        dc.b    2,0,2,0,2,1,2,2,2,2,0,1,2,3
  3064.  
  3065. ; Indizes fuer Zifferblatt
  3066.  
  3067. pent        dc.b    6,8,8,7,8,8,7,8,8,7,8,8
  3068.  
  3069. ; für ovales Zifferblatt
  3070.  
  3071. sinus        dc.b    $00,$0D,$1A,$27,$34,$40,$4B,$55,$5E,$67
  3072.         dc.b    $6E,$74,$79,$7C,$7E,$7F,$7E,$7C,$79,$74
  3073.         dc.b    $6E,$67,$5E,$55,$4B,$40,$34,$27,$1A,$0D
  3074.         dc.b    $00,$F3,$E6,$D9,$CC,$C0,$B5,$AB,$A2,$99
  3075.         dc.b    $92,$8C,$87,$84,$82,$81,$82,$84,$87,$8C
  3076.         dc.b    $92,$99,$A2,$AB,$B5,$C0,$CC,$D9,$E6,$F3
  3077.  
  3078. cosinus        dc.b    $7F,$7E,$7C,$79,$74,$6E,$67,$5E,$55,$4B
  3079.         dc.b    $40,$34,$27,$1A,$0D,$00,$F3,$E6,$D9,$CC
  3080.         dc.b    $C0,$B5,$AB,$A2,$99,$92,$8C,$87,$84,$82
  3081.         dc.b    $81,$82,$84,$87,$8C,$92,$99,$A2,$AB,$B5
  3082.         dc.b    $C0,$CC,$D9,$E6,$F3,$00,$0D,$1A,$27,$34
  3083.         dc.b    $40,$4B,$55,$5E,$67,$6E,$74,$79,$7C,$7E
  3084.  
  3085. ; für rechteckiges Zifferblatt
  3086.  
  3087. srect        dc.b    $00,$0D,$1B,$29,$39,$49,$5C,$6F,$7C,$7F
  3088.         dc.b    $7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F,$7F
  3089.         dc.b    $7F,$7F,$7C,$6F,$5C,$49,$39,$29,$1B,$0D
  3090.         dc.b    $00,$F3,$E5,$D7,$C7,$B7,$A4,$91,$84,$81
  3091.         dc.b    $81,$81,$81,$81,$81,$81,$81,$81,$81,$81
  3092.         dc.b    $81,$81,$84,$91,$A4,$B7,$C7,$D7,$E5,$F3
  3093.  
  3094. crect        dc.b    $7F,$7F,$7F,$7F,$7F,$7F,$7F,$7C,$6F,$5C
  3095.         dc.b    $49,$39,$29,$1B,$0D,$00,$F3,$E5,$D7,$C7
  3096.         dc.b    $B7,$A4,$91,$84,$81,$81,$81,$81,$81,$81
  3097.         dc.b    $81,$81,$81,$81,$81,$81,$81,$84,$91,$A4
  3098.         dc.b    $B7,$C7,$D7,$E5,$F3,$00,$0D,$1B,$29,$39
  3099.         dc.b    $49,$5C,$6F,$7C,$7F,$7F,$7F,$7F,$7F,$7F
  3100.  
  3101. ; Daten für Zifferblatt
  3102.  
  3103. dx1        dc.b    $FE,$02,$01,$FE,$01,$02,$FE,$FE,$FF,$FE,$FF,$FE
  3104. dy1        dc.b    $FC,$FF,$FE,$FE,$02,$01,$FE,$01,$02,$FE,$FE,$FF
  3105. dx2        dc.b    $04,$FE,$01,$04,$01,$FE,$04,$02,$FF,$04,$FF,$02
  3106. dy2        dc.b    $00,$03,$02,$00,$FE,$FD,$00,$FD,$FE,$00,$02,$03
  3107. dx3        dc.b    $00,$FE,$FD,$00,$FD,$FE,$00,$02,$03,$00,$03,$02
  3108. dy3        dc.b    $08,$FF,$02,$04,$FE,$01,$04,$01,$FE,$04,$02,$FF
  3109. dx4        dc.b    $FC,$02,$FF,$FC,$FF,$02,$FC,$FE,$01,$FC,$01,$FE
  3110. dy4        dc.b    $00,$FD,$FE,$00,$02,$03,$00,$03,$02,$00,$FE,$FD
  3111.  
  3112.         end
  3113.